とみます(@20tomimasu)です。
SCO-NFT保有者に対し、NFTのメタ情報からランダムに抽出して、報酬の当選者を選定したく…
discord.pyの簡単なプログラミングに挑戦中。
どうしても、’intents’エラーにより、botが動かったのものの、色々と試行錯誤した結果、動作するようになりました。
メッセージを入力すると、BOTが回答する簡単なスクリプトです。
ログとして残しておきます。
discord.pyの始め方
discordのbotは、
- discord.py
で、動かすことができるそう。
Pythonは、すでにインストールしてあるので、そのまま使えそうだ。
- discord.py 始め方
で検索すると。
webエンジニアのShun Tannaiさんの記事が分かりやすかった。
>>Pythonで実用Discord Bot(discordpy解説)
まずは、botのアカウント作成から。
discordのbotアカウント作成
- 「Developer Portal」より、New Applicationを選択する。
- botの画像や名前を設定していく。
- BotよりAdd botを選択する。
- tokenの文字列は、後のスクリプトで使う。
- OAuth2より、discordの鯖と連携させる。
以下、図を用いて↓
①「Developer Portal」より、New Applicationを選択する。
②botの画像や名前を設定していく。
↑後で変更もできるので、気楽に入力してOK。
③BotよりAdd botを選択する。
↑左側メニュー内のBOTを選択すると、BOTを追加できる。
一度登録すると、リカバーできないよ! と注意されるが、BOT用に作ったアカウントなので、そのままOK。
④tokenの文字列は、後のスクリプトで使う。
↑Botを作っていく。
- SCO #5370
と、discordのアカウントっぽくなってきた。
TOKENの文字列は、スクリプト内で使う。
他の人に共有しないように。いつでも、Reset Tokenで作り直せる。
⑤OAuth2より、discordの鯖と連携させる。
↑左側メニューより、URL Generatorを選択する。
BOTを選択し、BOTの操作権利を設定する。色々試したけど、管理者にしておけばOKかな。
その後、URLが発行されるので、ブラウザにコピペすると↓
↑自分の建てた鯖に追加できるようになる。
そのまま認証して、完了。
スクリプトと’intents’エラーに対して
↑client のところで、エラーが発生してしまい。赤文字は失敗例。
- TypeError: __init__() missing 1 required keyword-only argument: ‘intents’
色々と検証したものの、エラーは消えたけどBOTが動かないなどの症状に直面し。
BOTのログインは確認できたのだが、メッセージ入力に対し、BOTからの回答が無い…
結論、intentsを以下にすることで行けた。
- client = discord.Client(intents=discord.Intents.all())
似たような質問が出ていた。
>>discord.pyを使ってBotを作っていたらエラーを吐かれた
最終的なIDLEでの編集後のスクリプトは↓
# 自分のBotのアクセストークンに置き換えてください
TOKEN = 'xxxxxxxxx'
# 接続に必要なオブジェクトを生成
client = discord.Client(intents=discord.Intents.all())
# 起動時に動作する処理
@client.event
async def on_ready():
# 起動したらターミナルにログイン通知が表示される
print('ログインしました')
# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
# メッセージ送信者がBotだった場合は無視する
if message.author.bot:
return
# 「/sco」と発言したら「にゃーん」が返る処理
if message.content == '/sco':
# if message.content.startswith('/sco'):
await message.channel.send('にゃーん')
# Botの起動とDiscordサーバーへの接続
print('ここまでok')
client.run(TOKEN)
print('ここまでok')
F5でrunさせてから、discordで打ち込むと…
行けたぁぁぁ!!
SCOちゃん可愛い(*´▽`*)。
randomモジュールの使い方は、また次回。
おわりに
以上「discord.pyの始め方 ‘intents’エラーに対して」でした。
なんとか、BOTが動作しました。w
後は、SCO-NFTのメタ情報=background, body, face, fronthairの中からランダムに選定して、返答するようなプログラムを書ければ行けそうで。
久しぶりのpythonに苦戦しつつ。
少しずつ自分アップデートしていければ。
それでは、また。