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

Python基于discord.py提取Discord显示名括号内数字的代码修复问题

问题修复方案

原代码核心错误点

  • 语法不规范:if判断语句后缺失冒号,代码缩进逻辑混乱
  • 逻辑完全错误:if int in {playerid}是错误写法,将Python内置的int类型作为元素判断是否在集合中,既不符合「检查字符串内是否包含数字」的需求,也会触发类型相关的哈希错误
  • 变量命名错误:直接使用内置类型名int作为自定义变量名,会触发严重的命名冲突
  • 功能逻辑缺失:完全没有实现从用户显示名中提取方括号内数字的逻辑,且错误使用user.mention(discord的mention格式为<@用户ID>,不会携带你要的[数字]后缀,需要取user.display_name属性)

修复后可运行代码

首先确保你已经导入re模块,完整代码如下:

import re
import discord
from discord.ext import commands

# 此处替换为你自己的Bot初始化逻辑,确保Intents开启了members权限
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command()
async def playerid(ctx, *, user: discord.Member = None):
    """get playerid"""
    # 确定提取目标用户
    target = user if user else ctx.author
    # 正则匹配方括号内的数字
    match_result = re.search(r'\[(\d+)\]', target.display_name)
    if match_result:
        await ctx.send(match_result.group(1))
    else:
        await ctx.send("未查询到符合格式的ID")
    await ctx.message.delete()

实现说明

  • 用正则表达式r'\[(\d+)\]'匹配任意被方括号包裹的连续数字,group(1)即可直接提取括号内的数字内容
  • 自动适配两种调用场景:不传@用户时取当前触发用户的显示名,传@用户时取被@用户的显示名
  • 增加了匹配失败的兜底提示,避免无输出报错

内容的提问来源于stack exchange,提问作者Bruce Taylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:04