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

运行Discord机器人无输出无报错,如何排查修复?

Discord机器人无输出仅显示exit code 0的解决方法

问题概述

开发私人服务器Discord机器人(包含LBot.py、main.py、LResponses.py三个文件,使用PyCharm Community Edition 2022)时,运行代码后无任何输出(无报错、无预期启动提示),仅显示Process finished with exit code 0,预期机器人启动后输出DiscordBotName is now up, and running!。

核心问题与修复

1. 致命错误:client.run(TOKEN)位置错误

原代码中client.run(TOKEN)被嵌套在on_message事件函数内部,而on_message仅在机器人收到消息时才会触发——但机器人根本未启动,这段代码永远不会执行,程序直接结束,因此无任何输出。

需将client.run(TOKEN)移至run_discord_bot函数的最外层,所有事件定义完成后执行。

修正后的LBot.py代码

import discord
import LResponses

async def send_message(message, user_message, is_private):
    try:
        response = LResponses.get_response(user_message)
        await message.author.send(response) if is_private else await message.channel.send(response)

    except Exception as e:
        print(e)

def run_discord_bot():
    # 替换为你实际的机器人Token,格式为类似"xxxxxxxxxxxx.xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxx"的字符串
    TOKEN = "你的Discord机器人Token"
    intents = discord.Intents.default()
    intents.message_content = True
    client = discord.Client(intents=intents)

    @client.event
    async def on_ready():
        print(f'{client.user} is now up, and running!')

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

        username = str(message.author)
        user_message = str(message.content)
        channel = str(message.channel)

        print(f'{username} said "{user_message}" ({channel})')

        # 改用startswith更安全,避免空消息引发索引错误
        if user_message.startswith('%'):
            user_message = user_message[1:]
            await send_message(message, user_message, is_private=True)
        else:
            await send_message(message, user_message, is_private=False)

    # 将启动语句移至事件定义完成后
    client.run(TOKEN)

其他优化点

2. Token语法错误修正

原代码中TOKEN = '*Discord Bot 'Token' goes here*'存在字符串嵌套单引号的语法错误,需替换为正确的机器人Token,用双引号或转义单引号包裹。

3. 命令匹配大小写统一

原LResponses.py中$roll10的判断区分大小写,建议改为和其他命令一致的小写匹配,提升用户体验:

import random

def get_response(message: str) -> str:
    p_message = message.lower()

    if p_message == '$hello':
        return 'Hello!'

    if p_message == '$roll10':  # 改为小写匹配,取消大小写限制
        return str(random.randint(1, 10))

    if p_message == '$help':
        return '`If you see this Message, tell the programmer about the Morning Coffee.`'

4. 空消息安全处理

原代码中user_message[0] == '%'的判断,若用户发送空消息或仅输入%会引发索引错误,改用user_message.startswith('%')可避免该问题(已在修正代码中实现)。

内容的提问来源于stack exchange,提问作者Yehia-Afifi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:30:47