Discord Bot已上线但无消息响应,求问题排查
Discord机器人无响应问题排查与修复
问题描述
我制作了一个Discord机器人,它已成功上线,但完全无法正常工作。原本期望机器人至少能提示已收到消息,但没有任何反应。
相关代码
main.py
from typing import Final import os from dotenv import load_dotenv from discord import Intents, Client, Message from responses import get_response #load token load_dotenv() TOKEN: Final[str] = os.getenv('DISCORD_TOKEN') # print(TOKEN) #BOT SETUP intents: Intents = Intents.default() intents.message_content = True client: Client = Client(intents=intents) #message functionality async def send_message(message: Message, user_message: str) -> None: if not user_message: print("(Message was empty because intents were not enabled problably)") return if is_private := user_message[0] == '?': user_message = user_message[1:] try: response: str = get_response(user_message) await message.author.send(response) if is_private else await message.channel.send(response) except Exception as e: print(e) #handle bot startup @client.event async def on_ready() -> None: print(f'{client.user} is now running!!') #handle incoming messages client.event async def on_message(message: Message) -> None: print("A message was sent") if message.author == client.user: return username: str = str(message.author) user_message: str = message.content channel: str = str(message.channel) print(f'[{channel}] {username}: "{user_message}"') await send_message(message, user_message) #main entry point def main() -> None: client.run(token=TOKEN) if __name__ == '__main__': main()
response.py
from random import choice, randint def get_response(user_input: str) -> str: print("function called") lowered: str = user_input.lower() if lowered == '': return "Well, you're awfully silent..." elif 'hello' in lowered: return "hello there" elif 'roll dice' in lowered: return f'You rolled : {randint(1,6)}' else: return choice([ 'I do not understand', 'what are you talking about', 'do you mind rephrasing that' ])
问题根源
核心错误是**on_message事件未正确注册**:你在定义消息处理函数时,漏掉了装饰器的@符号。原代码中写的是client.event,正确的写法应该是@client.event——没有这个@,Discord客户端无法识别这是一个事件处理器,导致机器人完全不会监听和响应任何消息。
修复方法
修改main.py中的消息处理部分,给client.event加上@符号:
#handle incoming messages @client.event async def on_message(message: Message) -> None: print("A message was sent") if message.author == client.user: return username: str = str(message.author) user_message: str = message.content channel: str = str(message.channel) print(f'[{channel}] {username}: "{user_message}"') await send_message(message, user_message)
额外检查项
为确保机器人正常运行,还需确认以下几点:
- 登录Discord开发者后台,在机器人设置中开启Message Content Intent(代码中已启用该意图,必须后台同步开启)
- 验证
.env文件中的DISCORD_TOKEN是否正确,无拼写或格式错误 - 邀请机器人到服务器时,授予其必要权限(如发送消息、读取消息内容等)
内容的提问来源于stack exchange,提问作者Jason Christian
相关产品推荐
相关产品推荐

