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

