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

Discord Python机器人距离计算事件无响应求助

解决Discord Python机器人距离计算功能无响应的问题

嘿,我帮你排查下这个机器人没反应的问题,大概率是几个基础配置或者代码细节写错了,我给你梳理几个关键修复点:

1. 客户端初始化完全错了!

你用discord.Client()却加了command_prefix参数,这根本不兼容啊!discord.Client是最基础的客户端,不支持命令前缀功能,要做带命令的机器人,得用commands.Bot才行,而且现在Discord必须要配置意图才能读取消息:

from discord.ext import commands
import discord
import gpxpy.geo
import math
import asyncio

# 先配置意图,必须开message_content才能读取用户命令
intents = discord.Intents.default()
intents.message_content = True

# 换成commands.Bot初始化,这才是带命令功能的客户端
client = commands.Bot(command_prefix='kaikai*', intents=intents)

2. 事件装饰器拼写错误

你写的@client.async_even...明显打错了!正确的事件装饰器是@client.event,而且现在Discord.py的事件函数都用async def定义,不用加额外前缀:

@client.event
async def on_message(message):
    # 一定要先加这句,不然自定义命令会失效
    await client.process_commands(message)
    
    # 举个例子,识别你的距离计算命令
    if message.content.startswith(f'{client.command_prefix}calc_distance'):
        # 拆分用户输入的参数
        parts = message.content.split()
        if len(parts) != 5:
            await message.channel.send("格式不对哦!正确输入:kaikai*calc_distance 纬度1 经度1 纬度2 经度2")
            return
        try:
            lat1, lon1, lat2, lon2 = map(float, parts[1:5])
            # 用gpxpy计算两点距离(单位米)
            distance = gpxpy.geo.haversine_distance(lat1, lon1, lat2, lon2)
            # 按宝可梦GO玩家大概的移动速度(1.5米/秒)算等待时间
            wait_time = distance / 1.5
            minutes = int(wait_time // 60)
            seconds = int(wait_time % 60)
            await message.channel.send(f"两地距离约{round(distance/1000,2)}公里,你大概要等{minutes}分{seconds}秒才能到哦!")
        except ValueError:
            await message.channel.send("请输入有效的数字坐标呀!")

# 最后别忘了启动机器人,替换成你的令牌
client.run('你的机器人令牌')

3. 必须开启的权限配置

  • 去Discord开发者后台的Bot页面,找到Privileged Gateway Intents,把Message Content Intent开关打开,不然机器人读不到用户发的命令内容
  • 邀请机器人进服务器时,要给它分配发送消息和读取消息历史的权限,不然它没法和用户互动

更规范的命令写法(推荐)

如果想用命令而不是监听消息事件,用@client.command()装饰器更靠谱,还能自动处理参数和错误:

@client.command()
async def calc_distance(ctx, lat1: float, lon1: float, lat2: float, lon2: float):
    distance = gpxpy.geo.haversine_distance(lat1, lon1, lat2, lon2)
    wait_time = distance / 1.5
    minutes = int(wait_time // 60)
    seconds = int(wait_time % 60)
    await ctx.send(f"两地距离约{round(distance/1000,2)}公里,你大概要等{minutes}分{seconds}秒才能到哦!")

# 自动处理命令错误
@calc_distance.error
async def calc_distance_error(ctx, error):
    if isinstance(error, commands.BadArgument):
        await ctx.send("请输入有效的数字坐标呀!")
    elif isinstance(error, commands.MissingRequiredArgument):
        await ctx.send("格式不对哦!正确输入:kaikai*calc_distance 纬度1 经度1 纬度2 经度2")

你先把这些基础错误修复了,应该就能正常运行了!如果还是有问题,再检查下机器人令牌是否正确,服务器里机器人有没有被禁言之类的。

内容的提问来源于stack exchange,提问作者Zen Chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:33