Discord.py 沉默命令
Discord.py silence command
最近我问了很多关于 discord.py 的问题,这就是其中之一。
有时有些人会向您的 discord 服务器发送垃圾邮件,但踢掉或禁止他们似乎过于严厉。我有一个 silence
命令的想法,它会在给定的时间内删除频道上的每条新消息。
到目前为止我的代码是:
@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))
我的 on_message
部分的代码是:
if silentMode == True:
await BSL.delete_message(message)
if message.content.startswith('bsl;'):
await BSL.process_commands(message)
所有使用的变量都在机器人顶部预定义。
我的问题是机器人删除了它有权访问的所有频道中的所有新消息。我尝试将 if silentChannel == ctx.message.channel
放在 on_message
部分,但这使命令完全停止工作。
非常感谢任何关于为什么会发生这种情况的建议。
类似于
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)
应该可以(我还没有测试过,测试机器人很麻烦)。搜索集合很快,因此对每条消息都搜索不会对您的资源造成真正的负担。
最近我问了很多关于 discord.py 的问题,这就是其中之一。
有时有些人会向您的 discord 服务器发送垃圾邮件,但踢掉或禁止他们似乎过于严厉。我有一个 silence
命令的想法,它会在给定的时间内删除频道上的每条新消息。
到目前为止我的代码是:
@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))
我的 on_message
部分的代码是:
if silentMode == True:
await BSL.delete_message(message)
if message.content.startswith('bsl;'):
await BSL.process_commands(message)
所有使用的变量都在机器人顶部预定义。
我的问题是机器人删除了它有权访问的所有频道中的所有新消息。我尝试将 if silentChannel == ctx.message.channel
放在 on_message
部分,但这使命令完全停止工作。
非常感谢任何关于为什么会发生这种情况的建议。
类似于
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)
应该可以(我还没有测试过,测试机器人很麻烦)。搜索集合很快,因此对每条消息都搜索不会对您的资源造成真正的负担。