#python #discord #discord.py
Вопрос:
У меня есть строковая переменная, скажем, name = ‘Mark’, и я хочу изменить тип переменной, которая в настоящее время является строковой, на тип, импортируемый с помощью модуля. Этот тип являетсяТекстовый канал’> Я уже пытался использовать следующий код, но он выдал мне ошибку, которую вы видите ниже. код:
name_converted = discord.channel.TextChannel('Mark')
Я получаю следующую ошибку:
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 161, in on_message
msgch = discord.channel.TextChannel('mark')
TypeError: __init__() takes 1 positional argument but 2 were given
Комментарии:
1. На самом деле непонятно, что вы хотите делать. Источник для этого класса находится по адресу https://github.com/Rapptz/discord.py/blob/757cfad38f340f31f1b18bc198b3aa83e9cbe6dc/discord/channel.py#L62`
2. Вы не создаете эти классы вручную.
Ответ №1:
Если я понимаю, что вы пытаетесь сделать, вы пытаетесь восстановить канал от его имени. К сожалению, это невозможно, так как несколько каналов могут иметь одно и то же имя. Вам нужно будет получить идентификатор канала, а затем вы сможете сделать следующее :
chan_id = 0000 # This is the id of the channel.
msgch = await bot.fetch_channel(chan_id)
Комментарии:
1. get_channel-это не сопрограмма, ее не следует ожидать
2. Я хотел написать fetch_channel, моя вина
3. UnboundLocalError: локальная переменная «клиент», на которую ссылались перед назначением, я изменил бота на клиента, потому что я использую клиент вместо бота client.run(os.getenv («ТОКЕН»))
4. Я допустил ошибку, пожалуйста, найдите обновленный код. И ошибка, которая у вас есть, заключается в том, что ваша клиентская переменная не определена, пожалуйста, убедитесь, что вы указали правильное имя переменной вместо «бот».
Ответ №2:
Похоже, вы пытаетесь использовать преобразователь Textchannel. Ниже приведен пример команды, которая работает:
@bot.command()
async def convert_channel(ctx, channel: discord.TextChannel):
...
Тот : discord.TextChannel
рассказывает discord.py чтобы взять ввод (идентификатор канала, название канала, упоминание канала) и преобразовать его в текстовый канал. Что на самом деле происходит на заднем плане, так это:
user_input = ... # user input from the command
channel_object = await command.TextChannelConverter.convert(ctx, user_input)
Это непросто использовать вне команды, так как для этого требуется ctx
объект. Если это используется внутри on_message
события, то вы можете сделать это:
@bot.event
async def on_message(message):
ctx = await bot.get_context(message)
channel = await commands.TextChannelConverter.convert(ctx, message.content)
В противном случае вам придется настроить исходный код convert
, чтобы не требовался объект контекста. Вы можете найти его здесь