【问题标题】:Cooldown mapping | Discord.py冷却映射 |不和谐.py
【发布时间】:2020-12-10 07:49:30
【问题描述】:

我正在使用on_message 扫描特定关键字的代码,以便机器人可以做出相应的响应,不,我不能使用命令来实现这一点。

我想通过打开冷却时间来防止人们向这些关键字发送垃圾邮件,以便机器人在再次检查之前等待

文档内容:

class SomeCog(commands.Cog):
    def __init__(self):
        self._cd = commands.CooldownMapping.from_cooldown(1.0, 60.0, commands.BucketType.user)

    async def cog_check(self, ctx):
        bucket = self._cd.get_bucket(ctx.message)
        retry_after = bucket.update_rate_limit()
        if retry_after:
            # you're rate limited
            # helpful message here
            pass
        # you're not rate limited

我有什么:

class Listener(commands.Cog):
    def __init__(self, bot):
        self._cd = commands.CooldownMapping.from_cooldown(1.0, 10.0, commands.BucketType.user)

    @commands.Cog.listener()
    async def on_message(self, message):    

        async def cog_check(self, message):
            bucket = self._cd.get_bucket(message)
            retry_after = bucket.update_rate_limit()
            if retry_after:
                print('test')
                pass
        

            elif (message.guild is None):  
                return '.'

            else:
          . . . . . #code which tests for the keywords

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:
    class SomeCog(commands.Cog):
        def __init__(self, bot):
            self.bot = bot
            self._cd = commands.CooldownMapping.from_cooldown(1.0, 60.0, commands.BucketType.user) # Put your params here
                                                            # rate, per, BucketType
    
        def ratelimit_check(self, message):
            """Returns the ratelimit left"""
            bucket = self._cd.get_bucket(message)
            return bucket.update_rate_limit()
    
    
        @commands.Cog.listener()
        async def on_message(self, message):
            if 'check if the message contains certain words here':
                # Getting the ratelimit that's left
                retry_after = self.ratelimit_check(message)
                if retry_after is None:
                    # You're not ratelimited
                else:
                    # You're ratelimited, you can delete the message here
                    await message.delete()
                    await message.channel.send(f"You can't use those words for another {round(retry_after)} seconds.")
    

    这里的代码评估消息是否包含某些单词,如果包含,则检查 ratelimit,如果有 - 删除消息并发送消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2021-05-01
      相关资源
      最近更新 更多