Discord.py on_message () отсутствует аргумент - PullRequest
1 голос
/ 22 марта 2020

Я не знаю, глуп ли я, но я долго пытался добавить этот недостающий аргумент, и он не сработал t Кстати, я не 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")

И я был бы рад, если бы Вы могли бы объяснить эту проблему так легко, как только можете, спасибо.

1 Ответ

1 голос
/ 24 марта 2020

Э-э, главная проблема в том, что вы создаете класс 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 (или не использовал его), и ваш код может содержать ошибки.

...