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

Discord.py机器人无报错但无法运行求助:无日志输出

Discord机器人启动无输出问题排查与修复

问题原因分析

你的代码存在多处语法和逻辑错误,导致机器人无法正常启动且无日志输出:

  • on_ready 函数未绑定客户端事件,缺少 @client.event 装饰器,启动后不会执行日志打印逻辑
  • 代码缩进错误:on_member_join 事件、keep_alive()、client.run() 等核心启动代码被嵌套在 dm 命令函数内部,机器人根本没有启动机会
  • 拼写错误:massage 应为 message(包含 wait_for 的事件名和变量名)
  • ctx.member 属性不存在,需用 ctx.author 指代命令发起者
  • member.Guild 应为 member.guild(Discord.py 中属性名采用小写)
  • client.close() 无需放在 client.run() 后,后者是阻塞式调用,执行到这行时机器人已停止,代码无效

修正后的代码

import discord
from discord.ext import commands
import os
import keep_alive

client = commands.Bot(command_prefix="!")
token = os.environ.get('Token')
GUILD = os.environ.get('Guild')

@client.event
async def on_ready():
    print(f'{client.user} is connected')

@client.command()
async def dm(ctx, member: discord.Member):
    await ctx.send('what do u want to say bitch!')

    def check(m):
        return m.author.id == ctx.author.id

    message = await client.wait_for('message', check=check)
    await ctx.send(f'send message to {member} ')

    await member.send(f'{ctx.author.mention} has a message for you: \n {message.content}')

@client.event
async def on_member_join(member):
    channel = discord.util.get(member.guild.channels, name='general')
    if channel:
        await channel.send(f'Hey welcome to my server {member.mention}, hope you enjoy this server!')

keep_alive.keep_alive()
client.run(token)

额外说明

  • 确保环境变量 Token 已正确配置,否则机器人无法获取令牌完成启动
  • on_member_join 中增加了频道存在性判断,避免因找不到目标频道触发报错
  • wait_for 获取的 message 对象需调用 message.content 才能拿到文本内容,直接发送对象会输出元信息而非实际消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:36:19