我向我的漫游器发出了一个命令,要求用户输入!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
答案 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
文本是否位于 消息,并最终提到了所有人。