You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在discord.py中如何从Client对象获取应用令牌以识别消息来源

问题解答

当然可以用令牌来识别消息对应的应用,但要注意Python闭包的延迟绑定问题——直接在循环里定义事件回调会导致所有回调都指向最后一个client的token,得做一点调整。

你的clients列表里每个元素已经保存了token(启动时用的clnt.token就是明证),所以只需要把当前client的token绑定到on_message回调里,避免闭包陷阱。

方法一:用默认参数捕获当前client

修改事件绑定部分的代码:

for client in clients:
    @client.obj.event
    async def on_message(message, current_client=client):
        if message.author.bot: 
            return
        await message.channel.send(current_client.token)

方法二:用函数工厂创建回调

如果觉得默认参数不够直观,也可以用函数工厂生成绑定了当前client的回调:

import functools

def create_message_handler(current_client):
    async def on_message(message):
        if message.author.bot: 
            return
        await message.channel.send(current_client.token)
    return on_message

for client in clients:
    handler = create_message_handler(client)
    client.obj.event(handler)

注意:Discord.py的Client实例本身不会存储原始令牌(启动后令牌会被内部处理,不会保留在公开属性里),所以必须依赖你自己在clients元素中保存的token值来实现识别。

内容的提问来源于stack exchange,提问作者Gia Nebieridze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:05:02