如何用discord.js v12.5.1非异步方式按ID给用户发私信
Discord.js v12.5.1 实现私信发送功能(非async/await版本)
修正原代码语法问题
你提供的原代码存在语法错误(缺少闭合括号),先补充完整基础结构:
client.once('ready', () => { // 私信发送逻辑写在这里 });
非async/await实现方案
以下是两种基于回调链的实现方式,适配discord.js v12.5.1:
方案1:优先从缓存获取用户,缓存不存在则调用API
client.once('ready', () => { const targetUserId = "替换为目标用户ID"; const cachedUser = client.users.cache.get(targetUserId); if (cachedUser) { cachedUser.send("测试私信内容") .then(() => log.info(`成功给 ${cachedUser.tag} 发送私信`)) .catch(err => log.error(`发送失败: ${err.message}`)); } else { // 从Discord API获取用户,不缓存结果(第二个参数设为false) client.users.fetch(targetUserId, false) .then(user => { user.send("测试私信内容") .then(() => log.info(`成功给 ${user.tag} 发送私信`)) .catch(err => log.error(`发送失败: ${err.message}`)); }) .catch(err => log.error(`获取用户失败: ${err.message}`)); } });
方案2:直接从API获取用户
如果不确定用户是否在缓存中,可直接调用API获取,通过回调链处理结果:
client.once('ready', () => { client.users.fetch("替换为目标用户ID") .then(user => user.send("测试私信内容")) .then(() => log.info("私信发送成功")) .catch(err => log.error(`操作出错: ${err.message}`)); });
注意事项
- 务必将代码中的
"替换为目标用户ID"替换为实际的用户ID(字符串格式) - 确保目标用户未屏蔽机器人,且机器人与用户至少在一个共同服务器内,否则会发送失败
- 错误处理不可省略,避免因异常导致程序崩溃
内容的提问来源于stack exchange,提问作者Altify
相关产品推荐
相关产品推荐

