所以我最近创建了一个带有各种meme命令和主持人命令的discord机器人。我对python比较陌生,但我了解它的要旨。我已经创建了一个命令,该命令可以让我(只有我)通过该bot DM用户。我现在想尝试使该机器人能够读取发送回它的消息并将其发送给我,无论它是打印在外壳中还是发送到我不在乎的特定频道/我,我只想能够看到发送给它的内容。我进行了一些阅读,发现了这一点,并从中收集了这一点:
@bot.event
async def on_message(message):
channel = bot.get_channel('channel ID')
if message.server is None and message.author != bot.user:
await bot.send_message(channel, message.content)
await bot.process_commands(message)
单单这对我来说不起作用,当我对机器人进行DM处理时,出现一条错误消息,提示“ AttributeError:'Message'对象没有属性'server'”。有人告诉我discord.py重写不使用“服务器”,而是使用“行会”。因此,我将其更改为message.guild。从那里它给了我一个错误“ AttributeError:'Bot'对象没有属性'send_message'”,这与我到达那里差不多。我对此进行了修改,并在这里和那里进行了更改,并取得了一些细微的进步……我认为。我的新代码是:
@bot.event
async def on_message(ctx, message):
channel = bot.get_channel('channel ID')
if message.guild is None and message.author != bot.user:
await ctx.send(channel, message.content)
await bot.process_commands(message)
这给了我错误“ TypeError:on_message()缺少1个必需的位置参数:'message'”。到目前为止,我已经知道了。如我所说,任何帮助将不胜感激,我对python还是有些陌生,我才在2个月前才开始使用它。
您的第一个代码使用的是古老,过时且不受支持的dpy版本。
除了on_message事件之类的一些错误外,您大部分都在第二个代码中正确地对其进行了更新。
它不起作用,因为它仅接受一个参数message
,ctx
在那种情况下没有任何参数。
因此,该事件传递了一个参数,但是您的函数接受了2个错误。正确的代码是:async def on_message(message):
但是,现在您将对使用此行写的内容感到困惑: await ctx.send(channel, message.content)
即使ctx
存在,这也不起作用,因为send不再将目的地作为目标,而是您调用send on destination,destination.send("Hello")
因此如果channel
您希望将其发送到目的地,则将其转换为代码await channel.send(message.content)
最后一点,我注意到您在这里使用了字符串:bot.get_channel('channel ID')
这可能只是您提供示例,但请记住ID是ints,如果您传递字符串,它将永远找不到该通道。
例如,这是无效的:bot.get_channel('123456789111315178')
这将是有效的: bot.get_channel(123456789111315178)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句