当前位置: 代码迷 >> python >> Discord.py on_message() 缺少参数
  详细解决方案

Discord.py on_message() 缺少参数

热度:61   发布时间:2023-07-16 11:06:43.0

我已经尝试了很长时间来添加缺少的参数,但我的尝试失败了。 我目前对 Python 不是很擅长,代码还没有完成,所以如果我不能很好地解释一些东西,请理解。

这是我的错误

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\...\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 312, in _run_event
    await coro(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'self'

这是我的代码的一部分

import asyncio
import discord
from discord import Member

client = discord.Client()
regel_channel_id = someid

class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged in as')
        print(self.user.name)
        print(self.user.id)
        print('------')

@client.event
async def on_message(message, self):
    if '$artikel' in message.content:
        await message.channel.send('Question here')

        def artikelanswer(m):
            return m.author == message.author and m.content.isstring()
        try:
            Titel = await self.wait_for('message', check=artikelanswer, timeout=10.0)
        except asyncio.TimeoutError:
            return await message.channel.send('Sorry, you took too long!.')
        print(Titel)

client.run("SECRET TOKEN")

我希望你能尽可能简单地解释这个问题。 先感谢您。

呃,主要问题是你正在创建一个MyClient类,但没有使用它。 那么,2个解决方案:

1. 你想使用MyClient

所以你的代码缩进是错误的,你需要正确缩进on_message()函数。

import asyncio
import discord
from discord import Member

regel_channel_id = someid

class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged in as')
        print(self.user.name)
        print(self.user.id)
        print('------')

    async def on_message(self, message):
        if '$artikel' in message.content:
            await message.channel.send('Question here')

            def artikelanswer(m):
                return m.author == message.author and m.content.isstring()
            try:
                Titel = await self.wait_for('message', check=artikelanswer, timeout=10.0)
            except asyncio.TimeoutError:
                return await message.channel.send('Sorry, you took too long!.')
            print(Titel)

client = MyClient()
client.run("SECRET TOKEN")

2. 你不想使用MyClient

所以你不能使用self

import asyncio
import discord
from discord import Member

client = discord.Client()
regel_channel_id = someid

@client.event
async def on_ready(self):
    print('Logged in as')
    print(self.user.name)
    print(self.user.id)
    print('------')

@client.event
async def on_message(message):
    if '$artikel' in message.content:
        await message.channel.send('Question here')

        def artikelanswer(m):
            return m.author == message.author and m.content.isstring()
        try:
            Titel = await self.wait_for('message', check=artikelanswer, timeout=10.0)
        except asyncio.TimeoutError:
            return await message.channel.send('Sorry, you took too long!.')
        print(Titel)

client.run("SECRET TOKEN")

请注意,您应该使用@client.command装饰器而不是在消息中查找命令,这将非常有帮助。 请注意,我只是帮助了您的MyClient类(或不使用它),您的代码可能包含错误。