実現したいこと
Discord特定の文言(ここでは'test.'という文言にしました)の後に書かれる単語を指定するGoogleスプレッドシート(ここでは'Sheet1')の空欄に出力し、チャットで流れる単語のから必要なものだけ収集したいです。
発生している問題・分からないこと
Discordのbotはpythonで作成し、ローカルで何度かmain.pyを実行しクリティカルなエラーは無くなりました。ただ、特にエラーがなく特定の文言をDiscordに書いてもスプレッドシートに書き込みされません。
ターミナル上は以下の画面で止まっていますが、Discordのbot自体は起動していることを確認しました。
% python3 main.py /Users/XXX/Desktop/python/main.py:69: RuntimeWarning: coroutine 'BotBase.add_cog' was never awaited bot.add_cog(MyCog(bot)) Object allocated at (most recent call last): File "/Users/XXX/Desktop/python/main.py", lineno 69 bot.add_cog(MyCog(bot)) We have logged in as discord-bot#1234
エラーメッセージ
error
1上記のターミナル画面以外にエラーはありません。
該当のソースコード
main.py
1import discord 2from discord.ext import commands 3import gspread 4from oauth2client.service_account import ServiceAccountCredentials 5from google.oauth2 import service_account 6import os 7os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/ XXX/Desktop/python/XXX(GCPで作成した認証情報のjsonパス)" 8import aiohttp 9import asyncio 10import tracemalloc 11tracemalloc.start() 12 13# Discord Botのトークン 14TOKEN = 'XXX(実際にはDiscoのTOKEN)' 15 16SPREADSHEET_KEY = 'XXX(実際にはスプシのキー)' 17SCOPE = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] 18CREDS_FILE = '/Users/XXX/Desktop/python/XXX(jsonのパス)' 19 20# サービスアカウントの認証情報を作成 21creds = service_account.Credentials.from_service_account_file(CREDS_FILE, scopes=SCOPE) 22 23# Google Sheetsに接続 24client_gspread = gspread.authorize(creds) 25sheet_name = 'Sheet1' 26# スプレッドシートの取得 27spreadsheet = client_gspread.open_by_key(SPREADSHEET_KEY) 28sheet = spreadsheet.worksheet(sheet_name) 29 30# インテントを取得 31intents = discord.Intents.default() 32 33# メッセージ受信イベントを有効にする 34intents.messages = True 35 36# Botを作成し、インテントを設定してインスタンス化 37bot = commands.Bot(command_prefix='!', intents=intents) 38 39# Discord Botの準備完了時の処理 40@bot.event 41async def on_ready(): 42 print(f'We have logged in as {bot.user}') 43 44# コマンドのCogを定義 45class MyCog(commands.Cog): 46 def __init__(self, bot): 47 self.bot = bot 48 49 # メッセージ受信時の処理 50 @commands.Cog.listener() 51 async def on_message(self, message): 52 # メッセージがBot自身の送信したものであれば無視する 53 if message.author == self.bot.user: 54 return 55 56 # 特定のキーワードがメッセージに含まれているか確認する 57 keyword = 'test.' 58 if keyword in message.content: 59 try: 60 # スプレッドシートに書き込むデータを準備する 61 row = [message.author.name, message.content, str(message.created_at)] 62 # データをスプレッドシートに書き込む 63 sheet.append_row(row) 64 print('Message written to spreadsheet:', row) 65 except Exception as e: 66 print('Error writing to spreadsheet:', e) 67 68# コグをBotに追加 69bot.add_cog(MyCog(bot)) 70 71 72# Discord Botを起動 73async def start_bot(): 74 async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session: 75 bot.session = session 76 await bot.start(TOKEN) 77 78# ボットを実行 79asyncio.run(start_bot())
試したこと・調べたこと
上記の詳細・結果
やりたいこと自体はこのサイトに近いと思います。
https://www.happylifecreators.com/blog/20210712/
参考にさせて頂きながらChatGPTに聞きながらエラーの修正をして行くうちに、記載したソースコードができました。
やったこと
・SSL証明書を適用($ /Applications/Python\ 3.7/Install\ Certificates.commandを実行)
・認証情報の修正(エラーは出なくなりました)
・GCPプロジェクト画面からGoogleSheetsとGoogleAPIの有効化
エラーが出ないのでどうしたら良いか分からず、お力を貸していただけますとありがたいです。
補足
バージョンはPython3.12です
0 コメント