#python-3.x #discord.py
Вопрос:
Название немного сбивает с толку, но я хочу создать команду, в которой пользователь сможет изменить имя канала. Теперь я хочу, чтобы он изменил имя ctx.channel, если в команде не упоминается канал, и указанный канал, если он упоминается. Вот что я пробовал, но это не работает:
@_channel.command(name="rename",
aliases=["re"],
brief="Renames channel.",
help="Renames the current channel or mentioned channel if argument passed.")
async def _rename(self, ctx, channel, *, newname=None):
if not newname:
newname = channel
channel = ctx.channel
current_name = ctx.channel.name
await ctx.channel.edit(name = newname)
await ctx.send(f"Changed channel name from **{current_name}** to **{ctx.channel.name}**.")
elif newname != None:
current_name = ctx.channel.name
await ctx.channel.edit(name = newname)
await ctx.send(f"Changed channel name from **{current_name}** to **{ctx.channel.name}**.")
Например, если я выполню команду >ch rename general
, я хочу, чтобы она переименовала название ctx.канала в «общее», но если я упомяну канал и >ch rename #bot general
хочу ли я, чтобы он изменил название упомянутого канала » бот » на «общее»
Ответ №1:
Вы можете использовать преобразователи диссонанса. Это позволяет вам задать discord.py чтобы попытаться преобразовать аргументы для вас. Необязательно[разногласие.TextChannel] означает попытку преобразовать один аргумент в несогласие.TextChannel и в случае сбоя установите значение Нет.
from typing import Optional
@commands.command(name='rename')
async def _rename(ctx, channel: Optional[discord.TextChannel] = None, *, new_name = None):
if channel is None:
channel = ctx.channel
await ctx.send(f'Change {channel} to {new_name}')
Возможно, вы захотите выдать ошибку, если new_name отсутствует.
Комментарии:
1. Спасибо! я ценю это.
2. о, и у моего бота есть своего рода универсальный обработчик ошибок, настроенный в другом коге, который в основном просто сообщает вам, что вы сделали неправильно, в читаемом тексте, а не в том, что он печатает в консоли
Ответ №2:
Вот последняя команда, измененная в соответствии с моими потребностями благодаря помощи @Nevus!
@_channel.command(name="rename",
aliases=["re"],
brief="Renames channel.",
help="Renames the current channel or mentioned channel if argument passed.")
async def _rename(self, ctx, channel: Optional[discord.TextChannel] = None, *, newname):
if channel is None:
channel = ctx.channel
current_name = channel.name
await channel.edit(name = newname)
await ctx.send(f"Changed {channel.mention}'s name from **{current_name}** to **{channel.name}**.")