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

如何实现Discord Bot每小时自动发送天气计算结果?

解决Discord Bot自动发送天气计算结果的问题

你的代码目前有几个关键问题,导致无法成功发送消息到Discord:discord.py是事件驱动的库,不能在客户端初始化后直接调用send()方法——此时客户端还未连接到Discord服务器,也没有指定要发送到哪个频道。另外,现在的discord.py版本需要配置intents才能正常运行。

下面是修正后的完整实现方案,包含每小时自动发送天气结果的逻辑:

步骤1:修正基础代码结构

首先,我们需要利用on_ready事件确保客户端准备就绪后再执行操作,同时配置必要的intents:

import discord
from discord.ext import tasks
import Secret  # 假设你的TOKEN存在这里

# 配置intents:至少需要启用消息内容意图,才能发送消息
intents = discord.Intents.default()
intents.message_content = True

# 初始化客户端,传入intents
client = discord.Client(intents=intents)

# 你的天气计算函数,这里用示例代替
def calculate_weather():
    return "temp is 25°C, sunny"

# 定义每小时执行的任务
@tasks.loop(hours=1)
async def send_weather_update():
    # 替换成你要发送的频道ID(注意是整数)
    channel = client.get_channel(123456789012345678)
    if channel:
        weather_result = calculate_weather()
        await channel.send(weather_result)
        print("天气更新已发送")
    else:
        print("未找到目标频道,请检查频道ID是否正确")

# 客户端就绪后启动定时任务
@client.event
async def on_ready():
    print(f'已登录为 {client.user}')
    # 启动定时任务,立即执行一次,之后每小时执行
    send_weather_update.start()

# 运行客户端
client.run(Secret.BOT_TOKEN)

关键说明:

  • Intents配置:从discord.py v2.0开始,必须显式启用message_content意图才能发送/读取消息。你需要在Discord开发者门户的Bot页面中开启"Message Content Intent"权限。
  • 频道ID获取:打开Discord的开发者模式(用户设置→高级→开发者模式),右键点击目标频道,选择"复制ID",替换代码中的123456789012345678。
  • 定时任务:使用tasks.loop装饰器可以轻松实现每小时执行的逻辑,start()方法会在客户端就绪后启动任务,默认第一次执行会有延迟,如果你想立即执行,可以在on_ready里先手动调用一次await send_weather_update()。
  • 异步操作:discord.py的所有IO操作(比如发送消息)都需要用async/await语法,这是你原代码缺失的重要部分。

调试提示:

如果运行后没有发送消息,先检查:

  • Bot是否已经加入了目标服务器,并且拥有发送消息的权限
  • 频道ID是否正确(确保是整数,不是字符串)
  • Discord开发者门户中是否启用了对应的intents

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:39