向不与我的机器人共享服务器的用户发送消息

Posted

技术标签:

【中文标题】向不与我的机器人共享服务器的用户发送消息【英文标题】:Send message to a user not sharing a server with my bot 【发布时间】:2019-10-23 14:43:45 【问题描述】:

我正在创建一个 discord.js 机器人和一个 express API,它们一起工作以允许我的桌面应用程序(在电子中创建)与服务器交互。我正在向我的桌面应用程序添加一个禁止管理选项卡,我可以从那里取消禁止用户。之后,我尝试向未禁止的用户发送消息,让他们知道他们已被禁止,并给他们一个邀请。但是我得到了错误。 “DiscordAPIError:无法向该用户发送消息”。我了解如果用户不与机器人共享服务器,则无法向用户发送消息,有解决方法吗?

// Unban user
// guild is the server that the bot is in and unbanning for
// note this is a private bot for only one server, so i don,t need multi-server handling

app.post(`/api/v1/unban/:id`, async (req, res) => 
  let toUnBan = await bot.fetchUser(req.params.id);
  let error = false;

  if (!toUnBan) 
    error = "Unexpected error occurred: User not found...";
  

  // 585739079585497099 is the bot's id
  if (!guild.members.get("585739079585497099").hasPermission("BAN_MEMBERS")) 
    error = "Bot doesn't have permission to unban members.";
  

  if (error === false) 
     try 
       guild.unban(toUnBan.id);
       res.status(200).send(
         success: true
       );
       // these lines are returning the error, workaround?
       let invite = await guild.channels.find(c => c.name === "General").createInvite();
       // goes with line above
       bot.users.get(toUnBan.id).createDM().then(dm => 
         dm.send(`Your ban on **$guild.name** has been lifted. Here you can join again :), $invite .`);
       );
      catch (e) 
       if (e) console.log(e.message);
       res.status(200).send(
         success: false,
         error: e.message
       );
     
   else 
    res.status(200).send(
      success: false,
      error: error
    );
  
);

提前致谢!

【问题讨论】:

【参考方案1】:

由于 Discord 中的隐私设置,在某些情况下,客户端无法向非好友且不共享服务器的用户发送消息。因此,通过严格的隐私设置禁止用户可能会导致以后无法联系到他们。

【讨论】:

以上是关于向不与我的机器人共享服务器的用户发送消息的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityViewController 不与微信共享

通过互联网与我的远程朋友共享系统[重复]

该机器人不再与用户共享服务器

如何将我网站上的表单字段中的输入数据发送到一个不和谐的 webhook,该 webhook 向不和谐的用户发送消息?

如何在不和谐上发送私人消息[关闭]

禁用ejabberd中的通信[关闭]