質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

100閲覧

(Python)Discordの特定のキーワードが書き込まれた場合、Googleスプレッドシートに出力したい

Jyokin

総合スコア1

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/04/23 07:56

編集2024/04/23 07:58

実現したいこと

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())

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

やりたいこと自体はこのサイトに近いと思います。
https://www.happylifecreators.com/blog/20210712/
参考にさせて頂きながらChatGPTに聞きながらエラーの修正をして行くうちに、記載したソースコードができました。

やったこと
・SSL証明書を適用($ /Applications/Python\ 3.7/Install\ Certificates.commandを実行)
・認証情報の修正(エラーは出なくなりました)
・GCPプロジェクト画面からGoogleSheetsとGoogleAPIの有効化

エラーが出ないのでどうしたら良いか分からず、お力を貸していただけますとありがたいです。

補足

バージョンはPython3.12です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

・コードを見直し
・Discordの開発者サイトでIntentを有効化する必要がありました。

見ていただいた方、変なコードですみませんでした。ありがとうございました!

投稿2024/04/25 06:52

Jyokin

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問