我很难弄清楚为什么我的代码的一部分可以工作,而另一部分不能。这两段代码完全分开工作,但是,当放在同一个文件中时,只有一段可以工作
我正在用Discord.py制作一个Discord机器人,代码的一部分(顶部)应该是mod mail,将一条消息发送给机器人,然后将其转发到服务器中的一个通道。然后,例如,版主可以通过获取用户ID并用<@用户ID>,然后,bot将接收该消息并将其发送给管理bot的人<;——这部分代码不起作用
我的文件的第二部分基本上监视一个名为img only的频道,并删除任何没有空字符串的消息,这意味着如果不删除,就不能发送任何非图像/文件的消息<;——此功能有效,它删除仅img频道中的任何字符串
这是我的密码:
import discord
client = discord.Client()
#mod-mail
@client.event
async def on_message(message):
empty_array = []
modmail_channnel = discord.utils.get(client.get_all_channels(), name = "mod-mail")
if message.author == client.user:
return
if str(message.channel.type) == "private":
if message.attachments != empty_array:
files = message.attachments
await modmail_channnel.send("[" + message.author.display_name + "] ")
for file in files:
await modmail_channnel.send(file.url)
else:
await modmail_channnel.send("[" + message.author.display_name + "] " + message.content)
elif str(message.channel) == "mod-mail" and message.content.startswith("<"):
member_object = message.mentions[0]
if message.attachments != empty_array:
files = message.attachments
await member_object.send("[" + message.author.display_name + "] ")
for file in files:
await member_object.send(file.url)
else:
index = message.content.index(" ")
string = message.content
mod_message = string[index:]
await member_object.send("[" + message.author.display_name + "] " + mod_message)
#img-only moderation
@client.event
async def on_message(message):
if str(message.channel) == "img-only" and message.content != "":
await message.channel.purge(limit=1)
client.run('Bot Token')
我使用Python 3.8.5、Discord.py 1.4.1,Visual Studio代码是我的代码编辑器
谢谢:)
首先,使用
Client
实例只能有一个on_message
;因为您有多个,所以只会调用最后一个on_message
。解决这个问题的一种方法是将两个on_message
事件组合成一个on_message
另一种方法是切换到
Bot
实例并使用listeners
。在下面的示例中,img唯一的调节是主listener
相关问题 更多 >
编程相关推荐