0

0

如何在 Discord 服务器中离线获取指定用户的历史消息计数

心靈之曲

心靈之曲

发布时间:2026-03-18 13:06:12

|

242人浏览过

|

来源于php中文网

原创

discord api 不支持离线查询或按条件搜索历史消息;唯一可行方式是实时遍历频道消息历史并逐条过滤,但受速率限制影响,效率极低且无法真正“离线执行”。

discord api 不支持离线查询或按条件搜索历史消息;唯一可行方式是实时遍历频道消息历史并逐条过滤,但受速率限制影响,效率极低且无法真正“离线执行”。

在 Discord 生态中,许多开发者希望构建一个“按需启动”的轻量级机器人,用于统计某位用户在特定时间段(如过去 7 天)内于整个服务器中的发言数量。理想场景是:本地运行脚本 → 连接服务器 → 扫描历史 → 输出结果 → 立即退出。遗憾的是,这在当前 Discord API 架构下不可行

核心限制:API 不提供消息搜索能力

Discord 官方 API 未开放任何类似 /messages/search?author_id=...&after=... 的端点。与客户端 UI 中的搜索功能不同,机器人权限(即使拥有 Read Message History)仅允许通过分页拉取(/channels/{id}/messages)获取消息流,且必须严格遵循以下约束:

  • 每个请求最多返回 100 条消息;
  • 全局速率限制为 50 次请求/秒(实际常被更严格的每通道限频压制);
  • 历史消息拉取必须按时间倒序分页,无法跳转或条件过滤——你必须下载并检查每一条消息才能判断是否属于目标用户、是否在指定时间范围内。

实际性能示例(以中等规模服务器为例)

假设一个服务器有 20 个活跃文本频道,平均每个频道近 7 天内产生 5,000 条消息(总计约 10 万条),使用 discord.py 实现基础遍历:

Buildt.ai
Buildt.ai

AI驱动的软件开发平台,可以自动生成代码片段、代码分析及其他自动化任务

下载
import asyncio
from discord import Client, Intents

intents = Intents.default()
intents.message_content = True  # 需明确启用
client = Client(intents=intents)

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')
    target_user_id = 123456789012345678
    cutoff_time = discord.utils.utcnow() - timedelta(days=7)
    total_count = 0

    for channel in client.get_all_channels():
        if not isinstance(channel, discord.TextChannel):
            continue
        try:
            async for msg in channel.history(limit=None, after=cutoff_time, oldest_first=False):
                if msg.author.id == target_user_id:
                    total_count += 1
            await asyncio.sleep(1)  # 主动退让,缓解限频风险
        except discord.Forbidden:
            continue  # 跳过无权限频道
        except Exception as e:
            print(f"Error in {channel.name}: {e}")

    print(f"User {target_user_id} sent {total_count} messages in last 7 days.")
    await client.close()  # 主动退出

client.run("YOUR_BOT_TOKEN")

⚠️ 注意事项:

  • 即使上述代码能运行,实际耗时可能达数十分钟甚至数小时(尤其跨多频道+高消息密度);
  • Discord 会主动断开长时间空闲或高频请求的连接,导致遍历中断;
  • limit=None 并非无限制——它只是取消客户端侧上限,服务端仍按分页强制截断(通常每次最多 100 条),需循环请求;
  • 无法绕过“Bot 必须在线并保持连接”的前提:所谓“离线运行”本质是误解——脚本启动即建立 WebSocket 连接,全程依赖实时网络与鉴权。

替代方案建议

若坚持数据可追溯性,推荐以下更务实路径:
长期运行 + 本地日志缓存:使用轻量框架(如 Pineapple 或自建 SQLite 记录器),仅监听新消息并持久化 author_id、channel_id、created_at 字段,后续查询毫秒级响应;
Webhook + 外部日志服务:通过频道 Webhook 将消息转发至自有后端(如 Flask API + PostgreSQL),实现灵活查询;
人工导出辅助:对小范围需求,可用第三方工具(如 ChatExporter)导出 JSON 后用 Python/Pandas 离线分析——但这需要管理员手动导出,不适用于自动化。

总结而言,Discord 的设计哲学是“实时交互优先,批量分析次之”。所谓“启动即查、查完即走”的离线统计模型,与 API 的底层约束存在根本冲突。工程实践中,应转向持续轻量采集 + 离线分析的组合策略,而非强求单次同步扫描。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

106

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

81

2025.12.15

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

458

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

84

2025.09.10

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

82

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

34

2026.01.31

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

3

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号