【问题标题】:Blocking commands in a certain discord.py channel阻止某个 discord.py 频道中的命令
【发布时间】:2018-09-16 17:08:44
【问题描述】:

所以我最近添加了这段代码

@bot.event
async def on_message(message):
    prefix = re.findall('([;]|[-]|[=]+)', message.content.lower())
    if prefix and message.channel.id == "405815888177266689":
             await bot.delete_message(message)

机器人确实删除了消息,但机器人检测到命令的速度太快,因此其他机器人会回复。我想让它在其他机器人无法回复的地方。我要问的是 - 是否可以基本上将清除添加到此命令以使其清除最近的 2 条消息(命令 + 机器人回复)。

【问题讨论】:

  • 从这些频道中禁止@everyone 角色可能会更容易,然后给其他所有人(不是机器人)一个可以从这些频道读取消息的角色。
  • Patrick Haugh 这不是我要问的。

标签: python python-3.x discord.py


【解决方案1】:

你可以这样做

@bot.event
async def on_message(message):
  prefix = re.findall('([;]|[-]|[=]+)', message.content.lower())
  if prefix and message.channel.id == "405815888177266689":
    await bot.delete_message(message)

    muted_bots = ['bot_1_id','bot_2_id']
    async for msg in bot.logs_from(bot.get_channel("405815888177266689"), limit=4):
      if msg.author.id in muted_bots:
        await bot.delete_message(msg)

在某人使用该前缀写了一条消息并被删除后,它会检查最后的消息数量(无论您将 limit 放在什么位置,取决于有多少机器人响应)并检查写该消息的人是否在您的muted_bots id 列表。

【讨论】:

  • 我又遇到了一个问题......如果我输入任何碰巧有的消息; - = 它删除了这条消息。
  • 您可以使用message.startswith()This is why your commands don't work 而不是re.findall()
  • OHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
  • 现在我得到这个错误 ```` prefix = message.startswith('([;]|[?]|[!]+)', message.content.lower()) AttributeError : 'Message' 对象没有属性 'startswith' ```` 我每次输入消息时都会收到这些错误
  • 抱歉,您必须使用 message.content.startswith() 获取字符串值并尝试使用谷歌搜索该命令以查看它是如何工作的,因为它只需要一个字符串或字符串元组,所以 message.startswith('([;]|[?]|[!]+) 不会给你正确的结果。而是像message.content.startswith(';')
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2014-04-04
  • 2018-11-07
  • 1970-01-01
相关资源
最近更新 更多