You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord.py修改Bot在线状态报错,请求问题排查

解决Discord机器人在线状态(Presence)设置报错的问题

嘿,我来帮你搞定这个在线状态设置的问题!先看了你贴的代码,发现你在on_ready事件里只写了启动打印逻辑,还没添加设置Presence的核心代码,另外还有几个常见坑需要注意,我一步步给你梳理:

首先,补全设置Presence的核心代码

Discord.py里设置机器人在线状态需要调用异步方法bot.change_presence(),而且要配合正确的Activity类型。先给你一个完整的修正代码示例:

import discord
from discord.ext import commands
import asyncio
import chalk
import requests
import random

# Bot配置
bottoken = "你的token(记得别泄露!)"
commandprefix = "#"

# 注意:Discord.py v2.x必须指定intents,否则会报错
bot = commands.Bot(command_prefix=commandprefix, intents=discord.Intents.default())

@bot.event
async def on_ready():
    print("Starting up")
    print(f"My username is {bot.user.name}")
    
    # 这里是设置在线状态的核心代码
    # 示例1:设置为“正在玩#指令帮助”
    activity = discord.Game(name="#指令帮助")
    # 示例2:设置为“正在听歌”
    # activity = discord.Activity(type=discord.ActivityType.listening, name="网易云音乐")
    # 示例3:设置为流媒体直播
    # activity = discord.Streaming(name="我的游戏直播", url="https://twitch.tv/你的频道")
    
    # 调用change_presence设置状态,status可选online/idle/dnd/offline
    await bot.change_presence(status=discord.Status.online, activity=activity)
    print("机器人在线状态已成功设置!")

bot.run(bottoken)

常见报错原因及排查步骤

  • 忘记加await关键字
    change_presence是异步方法,必须用await调用,这是新手最容易踩的坑!如果没加,会直接抛出异步相关的报错。

  • Discord.py版本兼容问题
    如果你用的是v2.x版本,必须在创建Bot实例时指定intents(就像上面代码里的intents=discord.Intents.default()),否则会触发权限相关的报错。建议用pip install -U discord.py升级到最新版,避免兼容性问题。

  • Activity类型错误
    不同的状态需要对应正确的Activity类型,比如监听状态要用discord.ActivityType.listening,而不是直接写字符串,否则会报错类型不匹配。

  • Token问题
    确保你的bot token是正确的,没有复制错误、过期或者泄露。如果token无效,机器人连不上Discord服务器,自然也无法设置状态。

额外提醒

别把token明文写在代码里!最好用环境变量或者专门的配置文件来存储,比如用os.getenv("BOT_TOKEN")读取环境变量,避免不小心泄露token导致机器人被盗用。

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

火山引擎 最新活动