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

Discord机器人!gender命令返回内存地址而非输入值问题排查

问题根因

你遇到的内存地址输出问题是语法错误导致的:
代码中gender = msg.split(" ")[1].lower这行,你只写了方法名lower,没有加括号()调用这个方法,所以gender变量存储的是字符串对象自带的lower方法本身,而不是方法执行后返回的小写字符串,才会输出类似<built-in method lower of str object at 0x7fc35adfc230>的方法内存引用信息。

另外你的代码还有两处会导致后续运行报错的问题:

  • 没有判断用户是否只发送了!gender而没有附带性别参数,这种情况下msg.split(" ")结果长度只有1,直接取索引[1]会触发索引越界错误
  • 新版discord.py(v1.0及以上版本)已经移除了message.server属性,获取服务器信息需要用message.guild,同时给用户加角色的方法也可以直接通过message.author.add_roles()调用,不需要走client对象
修复后可运行代码
import discord
from discord.utils import get
import os
import requests
import json
import random
from replit import db

client = discord.Client()

@client.event
async def on_ready():
  print(f"Successfully logged in as {client.user}")

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

  msg = message.content

  if msg.startswith("!gender"):
    msg_split = msg.split()
    # 校验参数是否完整
    if len(msg_split) < 2:
      await message.channel.send("使用格式错误,请输入 !gender male 或者 !gender female")
      return
    # 修复:加()调用lower方法获取小写字符串
    gender = msg_split[1].lower()
    if gender not in ("male", "female"):
      await message.channel.send(f"性别输入无效,仅支持Male/Female,你输入的内容为:{gender}")
      return
    if gender == "male":
      # 修复:替换废弃的message.server为message.guild
      role = get(message.guild.roles, name="Male")
      await message.author.add_roles(role)
      await message.channel.send("已成功为你添加Male角色!")
      
    if gender == "female":
      role = get(message.guild.roles, name="Female")
      await message.author.add_roles(role)
      await message.channel.send("已成功为你添加Female角色!")
修复点说明
  • 给lower补充括号(),正确执行字符串转小写的逻辑,拿到实际的用户输入值
  • 新增参数长度校验,避免用户漏输性别时触发报错
  • 替换废弃的接口属性,适配新版discord.py的API规范,保证角色分配逻辑正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:27:31