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

Discord.js V12如何拉取30天内旧embed消息并累加其字段中的数值

实现方案

以下方案默认针对Discord场景实现(embed是Discord通用消息组件,如果你使用其他平台,对应调整平台API调用逻辑即可)

一、前置准备

  • 确保你使用的机器人账号拥有对应频道的查看消息、读取消息历史权限
  • 安装基础依赖库(以Python + discord.py 技术栈为例):pip install discord.py

二、核心功能逻辑

可以参考以下逻辑开发:

  1. 监听指定的手动触发命令,比如!统计30天数值
  2. 计算30天对应的时间阈值:用当前时间减去30天的时间差
  3. 拉取指定频道内时间晚于该阈值的所有历史消息
  4. 遍历所有消息,筛选出带有embed结构的消息
  5. 定位到embed中你需要提取数字的目标字段(需要提前确认目标字段的固定名称或者索引位置,比如固定是embed的第2个字段,或者字段名是「提交数值」)
  6. 提取字段内容中的数字,做格式校验后累加到总和变量
  7. 所有消息遍历完成后,返回最终的累加结果

示例代码片段:

import discord
from datetime import datetime, timedelta

intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_message(message):
    if message.content == '!统计30天数值':
        # 计算30天前的时间节点
        thirty_days_ago = datetime.now() - timedelta(days=30)
        total = 0
        # 替换为你要统计的目标频道ID
        target_channel = client.get_channel(1234567890) 
        # 拉取30天内的所有历史消息
        async for msg in target_channel.history(after=thirty_days_ago, limit=None):
            if msg.embeds:
                embed = msg.embeds[0]
                # 替换为你实际的目标字段匹配逻辑,这里示例取name为「数值」的字段
                for field in embed.fields:
                    if field.name == '数值':
                        try:
                            num = int(field.value.strip())
                            total += num
                        except ValueError:
                            # 非数字内容直接跳过
                            continue
        await message.channel.send(f'最近30天的数值总和为:{total}')

client.run('你的机器人Token')

三、定时执行配置

如果你需要每30天自动执行一次,不需要手动触发命令,可以额外配置定时任务:

  • 安装定时任务依赖:pip install apscheduler
  • 在代码中配置周期任务,每30天自动执行上述统计逻辑,结果可以发送到指定的通知频道

注意事项

  • 如果频道历史消息量极大,建议分批次拉取,避免触发平台API限流
  • 提取数字时一定要加异常捕获,避免遇到非数字格式的内容导致程序崩溃
  • 提前确认embed的结构没有变动,避免字段位置/名称调整后提取错误

内容的提问来源于stack exchange,提问作者Mathias AC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:48:03