Я смотрел видео, в котором меня учили, как создать базу данных для простого приветственного канала! Это в основном устанавливает канал для каждого члена, который присоединяется, будет отправлять приветственный канал на свой собственный канал! К сожалению, я получил ошибку (см. Ниже) Может кто-нибудь помочь?

Вот база данных:

@client.command()
async def channel(self, ctx, channel:discord.TextChannel):
    if ctx.message.author.guild_permissions.manage_messages:
        db = sqlite3.connect("welcome.sqlite")
        cursor = db.cursor()
        cursor.execute("SELECT channel_id FROM main WHERE guild_id = {ctx.guild.id}")
        result = cursor.fetchone()
        if result is None:
            sql = ("INSERT INTO main(guild_id, channel_id) VALUES(?,?)")
            val = (ctx.guild.id, channel.id)
            await ctx.send(f"Channel has been set to {channel.mention}")
        elif result is not None:
            sql = ("UPDATE main SET channel_id = ? WHERE guild_id = ?")
            val = (ctx.guild.id, channel.id)
            await ctx.send(f"Channel has been updated to {channel.mention}")
        cursor.execute(sql, val)
        db.commit()
        cursor.close()
        db.close()

Вот ошибка:

Ignoring exception in command channel:
Traceback (most recent call last):
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 790, in invoke
    await self.prepare(ctx)
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 751, in prepare
    await self._parse_arguments(ctx)
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 670, in _parse_arguments
    transformed = await self.transform(ctx, param)
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 516, in transform
    raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: channel is a required argument that is missing.
0
user13415893 15 Июн 2020 в 11:09

2 ответа

Лучший ответ

Ошибка говорит о том, что при выполнении команды вы не указываете аргумент канала, например !channel #general.

Чтобы обойти это, вы можете установить аргумент по умолчанию, а затем проверить, является ли значение указанного аргумента значением по умолчанию. Если это так, то задайте в качестве аргумента канал, в котором была выполнена команда.

Вот так:

# Renamed the coroutine to avoid namespace pollution
@client.command(name="channel")
async def _channel(ctx, channel: discord.TextChannel=None):
    if not channel:
        channel = ctx.channel
    # rest of your code

Ссылка:

0
Diggy. 15 Июн 2020 в 10:57

Это дало мне новую ошибку:

Ignoring exception in command channel:
Traceback (most recent call last):
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "server.py", line 31, in channel
    channel = ctx.channel
AttributeError: 'str' object has no attribute 'channel'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 797, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\cedri\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\commands\core.py", line 92, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'channel'
0
Cedrik PICARD 15 Июн 2020 в 10:29