Discord漫游器在特定频道上监听命令

时间:2018-06-22 13:27:46

标签: python discord discord.py

我的discord机器人中有很多命令,而我想做的就是让bot仅在某些命令来自特定通道的情况下才监听它们。

以下是命令示例:

@bot.command(name='bitcoin',
                brief="Shows bitcoin price for nerds.")
async def bitcoin(pass_context=True):
    url = 'https://api.coindesk.com/v1/bpi/currentprice/BTC.json'
    response = requests.get(url)
    value = response.json()['bpi']['USD']['rate']
    await bot.send_message(discord.Object(id='<channel id is inserted here>'), "Bitcoin price is: " + value)
    # await bot.say("Bitcoin price is: " + value)

我可以在所需的特定通道中给出答案,但我希望机器人仅在命令在特定通道中触发时才回答,而不是在所有位置。

我使用if message.channel.id ='id'尝试了if / else,但是它不起作用。

1 个答案:

答案 0 :(得分:0)

您可以编写一个check来装饰命令。在下面,我们使用目标频道ID创建一个check,然后用该复选框装饰命令。

def in_channel(channel_id)
    def predicate(ctx):
        return ctx.message.channel.id == channel_id
    return commands.check(predicate)

@bot.command(name='bitcoin', brief="Shows bitcoin price for nerds.")
@is_channel('CHANNEL_ID')
async def bitcoin(pass_context=True):
    url = 'https://api.coindesk.com/v1/bpi/currentprice/BTC.json'
    response = requests.get(url)
    value = response.json()['bpi']['USD']['rate']
    await bot.send_message(discord.Object(id='<channel id is inserted here>'), "Bitcoin price is: " + value)
    # await bot.say("Bitcoin price is: " + value)