Discord.py silence command
最近我问了很多关于discord.py的问题,这就是其中之一。
有时,有些人向你的不和谐服务器发送垃圾邮件,但踢或禁止他们似乎过于严厉。我想到了一个
到目前为止,我的代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @BSL.command(pass_context = True) async def silence(ctx, lenghth = None): if ctx.message.author.server_permissions.administrator or ctx.message.author.id == ownerID: global silentMode global silentChannel silentChannel = ctx.message.channel silentMode = True lenghth = int(lenghth) if lenghth != '': await asyncio.sleep(lenghth) silentMode = False else: await asyncio.sleep(10) silentMode = False else: await BSL.send_message(ctx.message.channel, 'Sorry, you do not have the permissions to do that @{}!'.format(ctx.message.author)) |
我的
1 2 3 4 | if silentMode == True: await BSL.delete_message(message) if message.content.startswith('bsl;'): await BSL.process_commands(message) |
号
所有使用的变量都是在bot顶部预先定义的。
我的问题是,bot会删除它可以访问的所有通道中的所有新消息。我试着把
关于这件事发生原因的任何建议都非常感谢。
有点像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | silent_channels = set() @BSL.event async def on_message(message): if message.channel in silent_channels: if not message.author.server_permissions.administrator and message.author.id != ownerID: await BSL.delete_message(message) return await BSL.process_commands(message) @BSL.command(pass_context=True) async def silent(ctx, length=0): # Corrected spelling of length if ctx.message.author.server_permissions.administrator or ctx.message.author.id == ownerID: silent_channels.add(ctx.message.channel) await BSL.say('Going silent.') if length: length = int(length) await asyncio.sleep(length) if ctx.message.channel not in silent_channels: # Woken manually return silent_channels.discard(ctx.message.channel) await BSL.say('Waking up.') @BSL.command(pass_context=True) async def wake(ctx): silent_channels.discard(ctx.message.channel) |
应该有效(我还没有测试过,测试机器人很痛苦)。通过集合进行搜索很快,所以对每条消息进行搜索不应该成为您资源的真正负担。