Discord.PY多服务器机器人自定义欢迎消息占位符格式化方法
解决方案
从JSON文件读取的字符串属于普通文本字符串,Python不会自动解析其中的{}占位符,只有代码中显式声明的f-string才会在编译阶段处理变量插值,因此需要主动调用字符串格式化方法完成替换。
直接可用的修改代码
# 读取原欢迎消息 raw_msg = welcomem[str(member.guild.id)] # 格式化占位符,传入member对象即可匹配所有member开头的属性占位符 formatted_msg = raw_msg.format(member=member) # 发送格式化后的消息 channel.send(formatted_msg)
扩展说明
- 如果后续要新增其他类型的占位符,比如要加独立的服务器属性占位符
{guild.created_at},只需要在format方法里增加对应的参数即可:formatted_msg = raw_msg.format(member=member, guild=member.guild) - 安全注意:如果你的欢迎消息配置权限开放给非信任用户,需要额外做占位符白名单校验,避免恶意用户通过
{member.__class__}这类魔法属性访问敏感数据,只需提前把消息里的占位符提取出来和允许的白名单(比如member.mention、member.guild.name等)比对即可。
内容的提问来源于stack exchange,提问作者Toyu
相关产品推荐
相关产品推荐

