当前位置: 首页 > 面试题库 >

Discord.py静音命令

佘缪文
2023-03-14
问题内容

最近,我一直在询问有关discord.py的大量问题,这就是其中之一。

有时候,有些人向您的不和谐服务器发送垃圾邮件,但踢或禁止它们似乎太苛刻了。我想到了一个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)

所有使用的变量都在bot的顶部预先定义。

我的问题是,该漫游器会删除其有权访问的所有频道中的所有新消息。我尝试放入if silentChannel == ctx.message.channelon_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机器人设置一个静音命令,我对discord相当陌生。胡说八道,不明白出了什么问题。我不断地得到一个错误,即没有指定成员,而它显然是指定的。 我在youtube等网站上尝试了很多教程,但它总是略过一两个细节,所以我无法完全理解。如果有人能纠正我的代码,我将不胜感激,因为我仍在学习discord。皮耶。 它只是想给某人添加一个静音的角色,并完成它。在使用ban和kick命令

  • 如前所述。我正在尝试为我的Discord机器人创建一个临时静音命令。我遇到的问题是,它创建了一个静音的角色,但即使我更改了烫发,用户仍然可以编写消息。除此之外,我还收到了以下弃用警告: (节点:15956)弃用警告:集合#查找:改为传递函数

  • 我正在学习如何使用python创建一个discord bot,但我在使用这个命令时遇到了问题。我试图做的是踢一个特定的用户,然后使用bot将邀请发送回discord服务器。这是一个愚蠢的想法,但我真的想让它发挥作用。 我特别遇到的问题是如何踢一个特定的用户(带有用户标识),然后将该用户DM。 谢谢! 这里的代码: 这样做的目的是,如果具有适当角色类型的人一个特定的不一致用户id()被踢,机器人会自

  • 我正在制作一个不和谐机器人来跟踪在语音频道上花费的时间,但我想知道我是如何做到的,它不计算在某个频道上的成员的时间,比如afk频道。 这是我现在正在使用的事件

  • 我是一个初学者程序员(或者在我看来是这样),我需要帮助在音乐机器人中实现一个队列。 目前,只有当队列中有一首歌时,队列才能正常工作。如果有更多的歌曲,那么递归开始(在=wait serverQueue(语音,消息)之后从def play开始并等待play(queue.pop(0),语音,消息)从队列开始),并且所有歌曲只是跳过。 我试图以不同的方式解决这个问题,例如,引入了第二个变量,但这并没有带

  • 代码有效,但不是原因 这只会显示最后两个字的原因,我不知道为什么?我如何将其转为包含全部原因 (命令是'!静音@成员[时间][原因])