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

如何创建按需运行的Discord机器人统计指定用户消息数

可行解决方案建议

完全可以实现这种按需启动、用完即关的Discord消息统计机器人,核心思路是临时连接服务器→执行统计指令→输出结果→自动断开/关闭,无需持久化存储数据。以下是具体实现步骤和要点:

核心技术选型

  • 采用Discord官方Python库discord.py(或轻量替代库nextcord),二者均支持临时连接与批量消息拉取API。
  • 无需部署为常驻服务,直接写成脚本形式,按需运行即可。

实现步骤

1. 前置准备

  • 在Discord开发者平台创建机器人应用,获取机器人Token,给机器人分配读取消息历史和发送消息权限,将机器人邀请至目标服务器。
  • 安装依赖:执行pip install discord.py

2. 核心代码逻辑

编写脚本的核心流程:

  • 启动脚本后,机器人临时登录并连接服务器。
  • 监听指定指令(例如!stat @用户 7d),解析目标用户与统计时间段。
  • 遍历目标服务器所有文本频道,调用channel.history()API批量拉取指定时间段内的消息,统计目标用户的消息数量。
  • 将统计结果发送至指令发起频道。
  • 输出完成后,机器人自动登出并终止脚本。

3. 关键代码示例

import discord
from discord.ext import commands
from datetime import datetime, timedelta

# 替换为你的机器人Token
TOKEN = "YOUR_BOT_TOKEN"
bot = commands.Bot(command_prefix="!", intents=discord.Intents.default())
# 必须开启消息内容与消息历史意图
bot.intents.message_content = True
bot.intents.messages = True

@bot.command(name="stat")
async def count_messages(ctx, user: discord.User, days: str):
    try:
        # 解析时间段,如"7d"转为7天
        days_num = int(days.strip("d"))
        start_time = datetime.utcnow() - timedelta(days=days_num)
        total_msg = 0

        # 遍历服务器所有文本频道
        for channel in ctx.guild.text_channels:
            # 跳过无访问权限的频道
            if not channel.permissions_for(ctx.guild.me).read_message_history:
                continue
            # 批量拉取指定时间段内的消息
            async for message in channel.history(after=start_time, limit=None):
                if message.author == user:
                    total_msg += 1

        # 发送统计结果
        await ctx.send(f"用户 {user.display_name} 过去 {days_num} 天内共发送 {total_msg} 条消息")
        # 完成后自动关闭机器人
        await bot.close()
    except Exception as e:
        await ctx.send(f"统计出错:{str(e)}")
        await bot.close()

# 启动机器人
bot.run(TOKEN)

4. 注意事项

  • 权限配置:必须确保机器人拥有读取消息历史的权限,否则无法拉取历史消息。
  • API限制:Discord API对消息拉取有速率限制,discord.py会自动处理,但大服务器统计可能需要稍长时间。
  • 按需运行:直接运行脚本即可启动机器人,执行完指令后自动关闭,无需后台常驻,也不会存储任何消息数据。
  • 精度扩展:若需要更精确的时间段(如指定起始日期),可修改指令参数,解析具体日期字符串。

替代方案

如果不想编写代码,可结合Discord自带搜索功能手动统计,但批量覆盖所有频道时,脚本方案效率更高。

内容的提问来源于stack exchange,提问作者Zac Moon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:05:59