#python #discord.py
#python #discord.py
Вопрос:
мне нужно использовать мою команду discord в определенном канале, я использую @client.command() Я имею в виду, что если я использовал свою команду в другом канале, она не будет работать
@client.command()
async def w(ctx):
channel = client.get_channel(775491463940669480)
await ctx.send("hello) ```
Комментарии:
1. Вы хотите использовать эту команду только на одном конкретном канале, она не будет работать на других, верно?
2. да, точно, как я могу это сделать с помощью @client.command …и т. д
3. Я ничего не нашел об этом в документации discord, я знаю, что это существует, конечно, lol!. Но я ее не нашел: (
4.
ctx.channel
является discord.channel. Объект TextChannel и имеет связанные с ним атрибуты, такие как name и id — дает ли это вам то, что вам нужно?5. я хотел, чтобы моя команда была разрешена для определенного канала, в любом случае отсортирована, я нашел ее, наконец, lool. я опубликовал ответ. idk, если это метод noob или нет: D, но в любом случае он выполнил мою цель
Ответ №1:
Вы можете проверить ctx.channel
, соответствует ли она вашему конкретному каналу.
@client.command()
async def w(ctx):
if ctx.channel.id == 775491463940669480:
await ctx.send("hello)
Ответ №2:
Существует даже более простой способ сделать это, не получая канал. И без необходимости делать отступы во всем коде.
@client.command()
async def w(ctx):
# exit command if not the desired channel.
if ctx.channel.id is not 775491463940669480:
return
#code here
await ctx.send("hello")
Ответ №3:
client = commands.Bot(command_prefix="!")
@client.event
async def on_ready():
print("bot is Online")
-
@client.event
async def on_message(message):
cmdChannel = client.get_channel(776179059355942943)
if message.content.lower().startswith('!w'):
if message.channel.id == cmdChannel.id:
#command invoked in command channel - execute it
await client.process_commands(message)
else:
#command attempted in non command channel - redirect user
await message.channel.send('Write this command in {}'.format(cmdChannel.mention))
@client.command()
async def w(ctx, amount):
await ctx.send(f"done {amount}")
Ответ №4:
async def is_channel(ctx):
return ctx.channel.id = 775491463940669480
@client.command()
@client.check(is_channel)
async def w(ctx):
await ctx.send("hello)
Выполнение контрольного вызова функции is_channel
упрощает код, и вы можете повторно использовать его несколько раз.