如何在discord.py中获取当前频道的最新置顶消息?
discord.py 获取频道最新置顶消息实现方案
discord.py 内置了直接获取频道置顶消息的API,不需要额外调用第三方接口,具体实现逻辑如下:
核心逻辑说明
TextChannel 类内置的 pins() 方法会返回当前频道所有置顶消息的列表,列表默认按置顶时间从早到晚排序,最新置顶的消息默认在列表的最后一位,直接取下标为-1的元素即可拿到最新置顶消息。
代码实现示例
常规事件触发场景(以消息响应事件为例)
@bot.event async def on_message(message): # 过滤机器人自身发送的消息 if message.author.bot: return # 调用协程方法获取所有置顶消息,必须加await pinned_msg_list = await message.channel.pins() # 先判空,避免频道无置顶消息时报错 if not pinned_msg_list: await message.channel.send("当前频道暂无置顶消息") return # 取列表最后一位即为最新置顶的消息 latest_pinned = pinned_msg_list[-1] # 测试输出信息,可根据需求调整后续逻辑 await message.channel.send(f"最新置顶消息内容:{latest_pinned.content}\n发送者:{latest_pinned.author.display_name}")
按频道ID指定获取场景
# 传入整数类型的目标频道ID,获取频道对象 target_channel = bot.get_channel(123456789012345678) if target_channel: pinned_msg_list = await target_channel.pins() if pinned_msg_list: latest_pinned = pinned_msg_list[-1] # 此处添加后续业务逻辑
注意事项
pins()是协程方法,调用时必须加await,否则只会拿到协程对象无法获取实际数据- 需要提前给机器人授予
Read Message History权限,否则调用接口会抛出权限异常 - 如果你需要的是发送时间最新的置顶消息,而非最新置顶的消息,可以手动对返回列表排序:
pinned_msg_list = await target_channel.pins() if pinned_msg_list: # 按消息发送时间倒序排序,取第一位即为发送时间最新的置顶 latest_by_send_time = sorted(pinned_msg_list, key=lambda x: x.created_at, reverse=True)[0]
版本兼容说明
discord.py v1.x 和 v2.x 版本的 pins() 接口调用逻辑完全一致,上述代码两个版本都可以直接复用。
内容的提问来源于stack exchange,提问作者bd023
相关产品推荐
相关产品推荐

