如何让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
相关产品推荐
相关产品推荐

