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

如何让Discord机器人每隔20-30分钟向通用频道发送随机消息

解决方案:Discord机器人随机定时发消息到通用频道

1. 先修正代码语法问题并补全依赖

你的代码存在语法缺失、缩进错误,还没导入必要模块,先把基础结构补对:

import discord
from discord.ext import tasks, commands
import random
import asyncio

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

@tasks.loop(count=1)
async def send_random_message():
    # 遍历机器人加入的所有服务器
    for guild in client.guilds:
        # 优先找服务器默认系统频道(服务器设置里指定的默认频道)
        general_channel = guild.system_channel
        # 如果没有默认频道,找名称为"general"的文本频道(可自行改关键词)
        if not general_channel:
            general_channel = discord.utils.get(guild.text_channels, name="general")
        
        if general_channel:
            # 读取消息列表,过滤空行
            with open("quotes.txt", "r", encoding="utf-8") as f:
                quotes = [line.strip() for line in f if line.strip()]
                if quotes:
                    await general_channel.send(random.choice(quotes))
    
    # 随机生成20-30分钟间隔(转成秒)
    next_wait = random.randint(20*60, 30*60)
    await asyncio.sleep(next_wait)
    # 重新启动任务,实现循环
    send_random_message.start()

@client.event
async def on_ready():
    print(f"已登录:{client.user}")
    send_random_message.start()

# 替换成你的机器人Token
client.run("YOUR_BOT_TOKEN")

2. 核心功能说明

  • 随机间隔:不用固定的定时循环,改成任务执行完后随机休眠20-30分钟再重启任务,满足你要的随机间隔需求。
  • 通用频道匹配:
    • 先找服务器的system_channel,也就是服务器设置里的默认频道,这是最贴合“通用频道”的选项;
    • 如果服务器没设置默认频道,自动找名称为general的频道,你可以把name="general"改成你实际用的通用频道名称。
  • 消息处理优化:读取文件时过滤空行和换行符,避免发送空白消息。

3. 必做事项

  • 确保机器人在目标服务器有发送消息的权限;
  • quotes.txt要和代码放同一目录,每行写一条要发送的消息;
  • 替换代码里的YOUR_BOT_TOKEN为你的Discord机器人Token;
  • 去Discord开发者后台的Bot设置里,开启Server Members Intent和Message Content Intent,否则机器人无法读取服务器频道信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:20:21