Python, Измените тип переменной

#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 , чтобы не требовался объект контекста. Вы можете найти его здесь