Как исправить «discord.ext.commands.errors.MissingRequiredArgument: ctx - обязательный аргумент, который отсутствует». в discord.py - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь сделать простой бот с подклассом для обработки команд, но я получил эту ошибку

Вот здесь TraceBack:

Игнорирование исключения в команде teste: Traceback ( последний вызов последним): файл "/home/mrtrue/.local/lib/python3.8/site-packages/discord/ext/commands/bot.py", строка 863, в invoke await ctx.command.invoke (ctx) Файл "/home/mrtrue/.local/lib/python3.8/site-packages/discord/ext/commands/core.py", строка 721, в файле invait await self.prepare (ctx) " /home/mrtrue/.local/lib/python3.8/site-packages/discord/ext/commands/core.py ", строка 685, подготовить и ждать файл self._parse_arguments (ctx)" / home / mrtrue / .local / lib / python3 .8 / site-packages / discord / ext / commands / core.py ", строка 599, в _parse_arguments transformed = await файл self.transform (ctx, param)" / home / mrtrue /. local / lib / python3 .8 / site-packages / discord / ext / commands / core.py ", строка 445, в повышении transform MissingRequiredArgument (param) discord.ext.commands.errors.MissingRequiredArgument: ctx является обязательным аргументом Нет, что отсутствует.

А вот код:

import discord
from discord.ext import commands
import inspect

class BotLibertarin(commands.Bot):
    client = discord.Client()

    @client.event
    async def on_message(self,message):
        print(f"message from {message.author} what he said {message.content}")
        await self.process_commands(message)
class CommandsHandler(BotLibertarin):
    def __init__(self):
        super().__init__(command_prefix=".")

        members = inspect.getmembers(self)
        for name, member in members:
            if isinstance(member,commands.Command):
                if member.parent is None:
                    self.add_command(member)

    @commands.command()
    async def teste(self,ctx):
        await ctx.channel.send("teste")

1 Ответ

0 голосов
/ 21 января 2020

Я действительно советую вам потратить время на чтение документов . Я также напомню, что отправка сообщений в ToS запрещена без указания конкретной команды c (например,! Имя_команды) [хотя никто явно не следует ToS].

В любом случае. Попробуйте это:

import discord
from discord.ext import commands

client = commands.Bot(command.prefix='!')

@client.event
async def on_message(message):
    print(f"message from {message.author} what he said {message.content}")
    await message.channel.send(message.content)

@client.command()
async def teste(ctx):
    await ctx.channel.send("teste")
...