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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:24:04