Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法在on_消息事件中包含self、message和ctx?_Python_Pymongo_Discord.py - Fatal编程技术网

Python 有没有办法在on_消息事件中包含self、message和ctx?

Python 有没有办法在on_消息事件中包含self、message和ctx?,python,pymongo,discord.py,Python,Pymongo,Discord.py,现在,我正在使用cogs制作表情过滤器。要使用on_message事件检查人们是否在滥发表情,我需要在on_message事件中将self、message和ctx作为参数。(我需要ctx的原因是检查mongodb中的帮会id,这是我用来存储服务器是否已在过滤系统中登记的)。我的代码是 @commands.Cog.listener() async def on_message(self, message, ctx): existing = collection.fi

现在,我正在使用cogs制作表情过滤器。要使用on_message事件检查人们是否在滥发表情,我需要在on_message事件中将self、message和ctx作为参数。(我需要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()
@commands.Cog.listener()
异步def on_消息(self、message、ctx):
existing=collection.find_one({“serverid”:ctx.guild.id})
如果不存在:
回来
其他:
如果message.author.bot:
回来
s=message.content
s2=message.content.lower()
message.content=re.sub(“[\u*]”,“”,message.content)
message.content=re.sub(r“[\s]+[\s]{2}”,“”,message.content)
如果表情符号计数==1且len(无表情符号)<10:
当前=message.created_at.replace(tzinfo=datetime.timezone.utc).timestamp()
bucket=self.\u buckets1.get\u bucket(消息,当前)
重试\u after=bucket。更新\u速率\u限制(当前)
如果在以下时间后重试\u:
等待消息。删除()
开始使用过滤系统的命令工作正常,但on_消息事件会抛出错误,无论我尝试替换它的顺序如何

下面是错误:
回溯(最近一次呼叫最后一次):
文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site packages/discord/client.py”,第312行,在运行事件中
等待coro(*args,**kwargs)
TypeError:on_message()缺少1个必需的位置参数:“ctx”


如果有人知道如何修复错误,我将不胜感激,谢谢

由于这是一个
on_事件
侦听器,因此没有
ctx
被传递给您的函数。可以将事件侦听器的参数看作是一个菜单,您可以在其中排序所需的内容,而更多的是能够命名它传递给您的少数内容。因此,保留
message
参数,因为它是从库内部传递给函数的参数,并删除
ctx
参数

这就是说,
ctx
只是一种更简单的访问方式任何可以通过
ctx
访问的东西都可以通过其他方式找到。由于您需要公会id,因此使用message对象非常容易:

guild\u id=message.channel.guild.id

由于这是一个
on_事件
侦听器,因此没有
ctx
被传递给您的函数。可以将事件侦听器的参数看作是一个菜单,您可以在其中排序所需的内容,而更多的是能够命名它传递给您的少数内容。因此,保留
message
参数,因为它是从库内部传递给函数的参数,并删除
ctx
参数

这就是说,
ctx
只是一种更简单的访问方式任何可以通过
ctx
访问的东西都可以通过其他方式找到。由于您需要公会id,因此使用message对象非常容易:

guild\u id=message.channel.guild.id

这是正确的,但作为替代方案,在
on\u消息事件中有一种获取
ctx
的方法。您可以使用@Benjin Good Point!我忘记了这一点。这是正确的,但作为替代方案,在
on_message
事件中有一种获取
ctx
的方法。您可以使用@Benjin Good Point!我忘了那个