Discord.py — Разрешить команду в определенном канале

#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 упрощает код, и вы можете повторно использовать его несколько раз.