Discord Bot 删除特定频道中的消息

Posted

技术标签:

【中文标题】Discord Bot 删除特定频道中的消息【英文标题】:Discord Bot Delete Messages in Specific Channel 【发布时间】:2020-10-01 01:31:04 【问题描述】:

TIA 为您的帮助和道歉,我是新手,所以这可能是一个愚蠢的问题。我已经搜索过了,但找不到任何关于如何使不和谐机器人(在 Python 中)仅在特定频道中删除消息的具体内容。我希望删除发送到特定频道的所有消息,通过 PM 发送给用户的内容以及更改用户的角色。

有没有办法使用 on_message 并在特定频道中指定?

@client.event
async def on_message(message):
user = message.author
if message.content.startswith("Cluebot:"):
    await message.delete()
    await user.send("Yes?")
    await user.remove_roles(get(user.guild.roles, "Investigator"))

我遇到的问题是我也在使用现在不再起作用的命令,因为机器人只在消息以“Cluebot:”开头时才会响应我可以让机器人只在特定的渠道?

是否可以通过命令而不是事件来完成这项工作?

感谢您的帮助。 :)

【问题讨论】:

抱歉!我找到了一种解决方法:@client.command() async def reveal(ctx, *, answer): user=ctx.message.author if answer == solution: await ctx.message.delete() await user.send( "你是赢家!") await user.remove_roles(get(user.guild.roles, "Investigator")) else: await user.remove_roles(get(user.guild.roles, "Investigator")) await ctx. message.delete() await user.send("对不起," + answer + "不是正确答案。") 【参考方案1】:

我遇到的问题是我也在使用现在不再起作用的命令,因为机器人只在消息以“Cluebot:”开头时才会响应我可以让机器人只寻找“Cluebot:”吗?在特定频道中?

关于这个问题的线索是:

await bot.process_commands(message)

正如文档所说 Without this coroutine, none of the commands will be triggered.

关于您可以尝试按 ID 使用 get_channel 然后清除它的主要问题: 例如。

@client.event
async def on_message(message):
    purgeChannel = client.get_channel([CHANNEL ID]])
     await purgeChannel.purge(limit=1)

您可以将check 添加到purge() 以检查是否删除特定消息: 例如:

def check(message):
    return message.author.id == [author's ID]

@client.event
async def on_message(message):
    purgeChannel = client.get_channel([CHANNEL ID]])
     await purgeChannel.purge(limit=1, check=check)

【讨论】:

以上是关于Discord Bot 删除特定频道中的消息的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 在特定频道中发送消息

当有人加入特定频道时发送消息 - Discord Bot

如何“链接”一个频道,例如我的 Discord Bot 消息中的提及?

Python Discord Bot Prune 命令

Discord bot 发送消息特定通道错误

在 Discord (discord.py bot) 中仅从 1 个频道发送消息