我要将我创建的模块导入到计划作为main运行的python文件中。
在模块中,我有一个函数,
def coms(message, instRole):
其中instRole
应该是类的实例
在我的主要python文件中,我有一个对象,
instRole = Role()
我有一个功能:
def on_message(message):
coms(message, instRole)
我在下一行中调用:
on_message(m)
但是,永远不会调用coms函数。我已经在coms中放入了print语句,以确保它被调用,而不是被调用。
谢谢您的帮助
答案 0 :(得分:0)
如果您试图利用discord.py事件的优势,当机器人看到消息时将执行代码,那么您要定义一个协程(一个函数(使用async def
语法)并使用bot.event
装饰器将其注册到您的机器人。下面是一个基本示例:
from discord.utils import get
from discord.ext import commands
from other_file import coms
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_message(message):
instRole = get(message.server.roles, id="123") # Get the role with its id
await coms(message, instRole)
bot.run("TOKEN")
如果您希望其他文件中的协程实际上在不和谐的情况下做,则最好使该文件成为齿轮,这是一个为不和谐机器人实现特定功能的类。
cog.py:
from discord.ext import commands
class Cog():
def __init__(self, bot):
self.bot = bot
# Note no decorator
async def on_message(self, message):
await self.coms(message, instRole)
async def coms(self, message, role):
... # use self.bot instead of bot
def setup(bot):
bot.add_cog(Cog(bot))
main.py:
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
cogs = ['cog']
if __name__ == "__main__":
for cog in cogs:
try:
bot.load_extension(cog)
except Exception:
print('Failed to load cog {}\n{}'.format(extension, exc))
bot.run('token')