Discord.js创建专属对战频道后发送多Embed及随机配对玩家实现指引
基于Discord.js的频道创建后多Embed发送与反应配对实现思路
核心流程调整前提
- 现有代码中
guild.channels.create()是异步Promise操作,之前没有接收创建完成后的频道实例,直接执行后续操作会出现找不到目标频道的问题,首先要把创建操作的返回值正确存下来,才能继续发消息 - 整个反应处理的回调逻辑本身需要支持async/await,否则异步操作的时序问题会导致代码执行顺序混乱
多Embed消息发送实现
- 拿到创建完成的频道实例后,直接按顺序调用频道的
send方法,传入提前构建好的Embed内容对象即可发送2-3条提示消息 - 每条Embed的发送是独立的,不需要严格等待上一条发送完成再执行下一条,按照你规划的内容拆分即可,比如分别写频道规则、对战参与方式、奖励说明这类内容
- 不需要额外的批量发送方法,逐条调用
send就可以满足需求
指定Embed绑定反应的实现
- 因为每条调用
send的语句执行后,都会返回已经发送到频道里的消息实例,你只需要把计划用来触发配对逻辑的那条Embed对应的发送返回值存下来 - 对这个存下来的消息实例调用
react方法,传入你选定的触发用表情,就可以实现给指定Embed加反应的效果 - 注意区分反应归属:要提前标记这条用来触发配对的消息ID,后续捕获反应事件的时候,只响应这条消息上的反应,避免和其他消息的反应(比如最开始触发建频道的那条旧消息)逻辑冲突
后续随机配对逻辑衔接
- 捕获目标消息上的用户反应后,先过滤掉机器人账号自己的反应,把真实用户的ID存到临时参与列表中
- 当列表内的用户数量达到配对阈值(2人)时,从列表中随机抽取2名用户组成对战组,完成配对后将这两名用户从参与列表中移除,避免重复匹配
- 整个配对逻辑不需要和建频道的逻辑强绑定,只要能定位到触发反应的消息、拿到对应的频道实例就可以正常执行
内容的提问来源于stack exchange,提问作者UKzs
相关产品推荐
相关产品推荐

