在on_message事件中是否可以使用self,message和ctx?

问题描述 投票:0回答:1

现在,我正在使用齿轮制作表情符号过滤器。要使用on_message事件来检查人们是否在向表情符号发送垃圾邮件,我需要在on_message事件中使用self,message和ctx作为args。 (我需要ctx的原因是要检查mongodb中的行会ID,这是即时消息用来存储服务器是否已加入过滤器系统的方法)。我的代码是

    @commands.Cog.listener()
    async def on_message(self, message, ctx):
        existing = collection.find_one({"serverid": ctx.guild.id})
        if not existing:
            return
        else:
            if message.author.bot:
                return
            s = message.content
            s2 = message.content.lower()
            message.content = re.sub("[_~*]", "", message.content)
            message.content = re.sub(r"[\s]+[\s]{2}", "", message.content)
            if emoji_count == 1 and len(without_emojis) < 10:
                current = message.created_at.replace(tzinfo=datetime.timezone.utc).timestamp()
                bucket = self._buckets1.get_bucket(message, current)
                retry_after = bucket.update_rate_limit(current)
                if retry_after:
                    await message.delete()

开始使用过滤器系统的命令运行良好,但是无论我尝试替换它的顺序如何,on_message事件都会引发错误。

这里是错误:Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/discord/client.py", line 312, in _run_event await coro(*args, **kwargs) TypeError: on_message() missing 1 required positional argument: 'ctx'

如果有人知道如何解决该错误,谢谢,谢谢!

python pymongo discord.py
1个回答
0
投票

由于这是on_event侦听器,因此没有ctx被传递给您的函数。可以将事件侦听器的参数视为菜单,而不是菜单,您可以在其中订购所需的东西,而更多的人则可以命名它传递给您的一些东西。

话虽这么说,ctx不过是访问事物的一种简便方法ctx可访问的所有内容都可以通过其他方式找到。当您需要公会ID时,使用消息对象就很容易了:

guild_id = message.channel.guild.id
© www.soinside.com 2019 - 2024. All rights reserved.