はじめに
私はpython初心者です。discord.pyから学び始めました。
タイトルにありますように、discord.pyのdispanderがうまくいかない人のために
私の環境でうまく作動した修正案に関して共有した次第です。間違っていることもあるかもしれませんので、
コメントにてご報告いただければと思います。
追記: 2020/10/04 14:30
このコードは私の環境でのミスの可能性が十分あります。
動かなかった場合、1つの解決策と思っていただければと思います。
この方法が正しいものであるかの判断は私には出来かねます。
コメントでおっしゃられている通り、通常動くコードであると思います。
ただし、最後に示すGithubのコード comitt 789d88fで動かなかったことを踏まえ公開しております。
追記: 2020/10/04/22:50
ある方からご提示いただいたコードで動作することが確認いたしました。最後の部分にて載せてありますので、そちらの方をご覧いただければと思います。
開発環境
discord.py: 1.5.0
Heroku
dispander: 0.4.0
コード
下記は、DiscordBotPortalJPさんのdispanderで紹介されている関数として使用する場合のコードです。
root/
├ dispander/
│ ├ __init__.py
│ └ module.py
└ discordbot.py
import discord
from dispander import dispand
client = discord.Client()
@client.event
async def on_message(message):
if message.author.bot:
return
await dispand(message)
client.run(token)
ただし、私の環境ではどうやっても動きませんでした。
恐らく、dispander
のcogのsetup関数
が呼び出されていないようです。
ですので、
下記のコードに変更しました。
root/
├ dispander/
│ └ module.py
└ discordbot.py
import discord
import dispander.module as dispand
bot = discord.Client()
@bot.event
async def on_ready():
dispand.setup(bot)
await dispand(message)
bot.run(token)
と書いたわけなのですが…
root/
├ dispander/
│ └ module.py
└ discordbot.py
ある方から下記のコードをご提示いただきました。
私の環境にて確認したところ通常通り動くことを確認いたしましたので載せさせていただきました。
import os
import re
import discord
from dispander.module import dispand
from discord.ext import commands
client = discord.Client()
@client.event
async def on_message(message):
if message.author.bot:
return
await dispand(message)
client.run(token)
解説
discord.py(Rewrite版)のCogを使ってみるより、cogのsetup関数
を
dispand.setup(bot)
として、呼び出しを行いました。また、on_message(message):
だと、他の関数が動作しないという不具合が発生したため、on_ready():
内で呼び出しています。
最後に
Dispanserの招待リンクです。githubにてコードは公開してあります。
最後まで読んでいただきありがとうございました!
間違いなどございましたら冒頭にもありましたが、コメント等でお書きいただければと思います…。