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

如何正确执行discord.py中的loop循环任务 附异常代码示例

问题排查

你的循环无法运行的核心原因是定义完任务后没有主动启动,同时存在潜在的运行风险:如果循环在客户端完成登录、服务器缓存加载前触发,client.get_channel()会返回None导致报错。

修复步骤

1. 补充循环启动逻辑

在on_ready事件中添加循环启动代码,同时增加判断避免客户端重连时重复启动任务:

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))
    # 新增:判断循环未运行时启动
    if not myLoop.is_running():
        myLoop.start()

2. 补充Intents声明(discord.py v2.x 强制要求)

现在Discord API要求显式声明机器人需要的网关意图,你需要同时在代码和Discord开发者后台开启对应权限:
修改客户端初始化代码:

# 开启必要意图
intents = discord.Intents.default()
intents.message_content = True # 如需读取消息内容必须开启
client = discord.Client(intents=intents)

3. (可选)增加异常捕获避免循环中断

可以在循环逻辑中添加异常捕获,防止单次发送出错导致整个循环终止:

@tasks.loop(seconds = 10)
async def myLoop():
    try:
        channel = client.get_channel(899698630271856640)
        if channel: # 先判断频道是否存在,避免空指针报错
            await channel.send('1')
    except Exception as e:
        print(f"循环执行出错: {e}")
完整修改后代码示例
import discord
from discord.ext import tasks, commands

# 显式声明意图
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))
    # 启动循环
    if not myLoop.is_running():
        myLoop.start()

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('!test'):
        await message.channel.send('Working')

@tasks.loop(seconds = 10)
async def myLoop():
    try:
        channel = client.get_channel(899698630271856640)
        if channel:
            await channel.send('1')
    except Exception as e:
        print(f"循环执行错误: {e}")

# 替换为你自己的机器人Token
client.run("你的机器人Token")
注意事项
  • 运行代码前需要到Discord开发者平台的机器人管理页面,开启Privileged Gateway Intents下的Message Content Intent权限,否则无法读取用户消息内容,!test指令也会失效
  • 不要在循环中执行长时间的同步阻塞代码,否则会卡住整个机器人的异步事件队列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:57:03