我很难弄清楚为什么我的代码的一部分可以工作,而另一部分却不能。这两段代码可以完美地分开工作,但是,当放在同一个文件中时,只有一个可以工作。
我正在用discord.py制作Discord Bot,其中一部分代码(顶部)应该是mod-mail,收到一条消息,告诉您DM僵尸程序,然后将其中继到服务器中的某个频道。然后,例如,主持人可以通过获取其用户ID并使用<@userid>对其进行ping操作来回复此人,然后,该机器人将接收该消息并将其发送给DM机器人的人。 <-这部分代码不起作用
文件的第二部分基本上监视了一个仅称为img的通道,并删除了没有空字符串的任何消息,这意味着没有图像/文件的消息就不能被删除。 <-此功能有效,它将删除仅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 Code是我的代码编辑器
谢谢:)
答案 0 :(得分:1)
首先,使用on_message
实例只能有一个Client
;由于您有多个,因此仅会调用最后一个on_message
。解决此问题的一种方法是将两个on_message
事件合并为一个on_message
@client.event
async def on_message(message):
# Mod-mail
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
if str(message.channel) == "img-only" and message.content != "":
await message.channel.purge(limit=1)
另一种方法是切换到Bot
实例并使用listeners
。在下面的示例中,仅img审核是主listener
的{{1}}
on_message