You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord锦标赛机器人优化:实现用户换行列表与无提醒提及

解决锦标赛机器人的两个问题:换行显示用户列表与无通知提及

1. 让每个用户单独显示在新行

你当前的代码里,直接把users数组拼进字符串时,数组会默认调用toString()方法生成逗号分隔的列表,这就是为什么换行符只在标题后生效的原因。要让每个用户单独占一行,得手动把数组元素用换行符\n连接起来。

修改后的代码可以这样写:

// 先获取有效用户(过滤掉不存在的用户,避免报错)
const users = data.players.map(userId => client.users.get(userId)).filter(user => user);

// 将每个用户转换为字符串,并用换行符连接
const userList = users.map(user => `<@!${user.id}>`).join('\n');

// 发送消息
message.channel.send(`Current Participants:\n${userList}`);

如果更习惯用for循环,也可以调整成:

var users = [];
for (let i = 0; i < data.players.length; i++) {
  const user = client.users.get(data.players[i]);
  if (user) { // 确保用户存在再添加,避免无效数据干扰
    users.push(user);
  }
}

const userList = users.map(user => `<@!${user.id}>`).join('\n');
message.channel.send(`Current Participants:\n${userList}`);

2. 实现无通知的用户提及

要达成类似Discord客户端中\@Username的无通知提及效果,你需要在标准的用户提及格式前加一个反斜杠。标准用户提及格式是<@!用户ID>,在JavaScript字符串里需要转义反斜杠,所以写成<\\@!${user.id}>

把上面的userList生成代码修改一下就行:

const userList = users.map(user => `<\\@!${user.id}>`).join('\n');

这样发送后,消息会显示成@用户名的样式,但不会触发用户的通知提醒,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Chris T-Pot

火山引擎 最新活动