禁止使用@everyone

时间:2018-06-21 06:33:24

标签: python discord discord.py

我向我的漫游器发出了一个命令,要求用户输入!botsay ___时用户输入的内容,但我不知道阻止用户在命令中使用@everyone的最佳方法。我需要帮助弄清楚该如何解决我的代码。

这是我当前的代码:

@bot.command(pass_context = True)
async def botsay(ctx, *args):
    mesg = ' '.join(args)
    await bot.delete_message(ctx.message)
    if "@everyone" in message.content:
        await bot.delete_message(ctx.message)
        await bot.say("You may not tag everyone/here in this command, "+ctx.message.author.mention)
    else:
        return
        await bot.say(mesg)
        return

2 个答案:

答案 0 :(得分:0)

以下代码应该可以工作。它是用最新版本的discord.py和最新版本的Python编写的。

@client.event
async def on_message(message):
    messageText = message.content

    if message.author == client.user:
        return

    elif '@everyone' in messageText:
        messageText.replace('@everyone', '[REDACTED']

    else:
        await client.send_message(message.channel, text)

答案 1 :(得分:0)

除了Patrick Haugh在评论中所说的(我将其合并到此答案中);如果您没有及时处理注释,则问题可能是由多个delete_message引起的,并且您在实际发送成功消息之前已返回该函数。

我认为值得知道的是,有一个属性可以检查邮件是否提及所有人:

@bot.command(pass_context=True)
async def botsay(ctx, *, msg):
    await bot.delete_message(ctx.message)
    if message.mention_everyone:
        await bot.say("You may not tag everyone/here in this command, "+ctx.message.author.mention)
    else:
        await bot.say(msg)

从文档中

  

mention_everyone bool –指定消息是否提及所有人。

     

注意:

     
    

这不会检查消息中是否包含@everyone文本     本身。相反,此布尔值指示@everyone文本是否位于     消息,并最终提到了所有人。