NodeJS 获取当前通道disocrd.js-selfbot

8i9zcol2  于 2023-11-17  发布在  Node.js
关注(0)|答案(2)|浏览(123)

我正在使用discord.js-selfbot-v13,我遇到了一个问题,机器人需要一个频道列表,如果X条件为真,它需要发送一个消息,但是如果用户被禁止从公会它会抛出一个错误说消息访问。
有没有什么方法可以让它获取当前可用的频道而不是缓存的频道?当用户被禁止时,缓存的频道由于某种原因仍然存在,所以每次循环发生时,是否可以重新获取缓存到最新版本?
我尝试使用client.channels.cache.fetch(id)client.channels.cache.get(id),都产生了相同的错误,即找到不存在的通道。
下面是我使用的当前代码:

client.on("messageCreate", async (message) => {
    if(watchlist.includes(message.channel.id)){
      let link = await filterLink(message.content)
      if(link != null){
         let updated = await updateLink(link)
         if(updated){
            sendList.forEach( async (id) => {
               try{
                  
               }catch(error){console.log(error)}
            })
         }
      }
    }
})

字符串

mutmk8jj

mutmk8jj1#

警告:在OAuth/API范围之外使用自助机器人或自动化用户帐户违反Discord的服务条款,可能导致您的帐户被禁止。

虽然您可以使用您的个人帐户令牌来获取缓存的通道以使用discord.js进行身份验证,但由于selfbotting,Discord的API的功能会显着减少和限制,并且您不具有bot令牌所具有的相同功能,例如特权网关意图,特别是GUILD_MEMBERS意图,这是您尝试执行的操作所必需的。
因此,您在该高速缓存中可以访问的通道只能是那些发出您的客户端订阅的任何事件接收更新 (例如用户消息) 的通道。您试图实现的功能在selfbots中是不可能的。

khbbv19g

khbbv19g2#

我已经想出了一种方法或变通方法,这可能对任何有同样问题的人都有帮助,那就是将机器人分为两个机器人,一个机器人观看,然后使用Express服务器将数据发送给另一个机器人。
第一个selfbot:

// update function
async function updateLink(link, channel) {
  if (link != null) {
    let target = getTarget(channel.id)
    if (target == null) {
      return false
    }
    let response = await axios.post(
      "handler link",
      {},
      {
        headers: {
          target: target,
          gamelink: link
        }
      }
    )
    if (response.statusCode == 200) {
      return true
    } else {
      return false
    }
  }
}

// message event
client.on("messageCreate", async (message) => {
  if (watchlist.includes(message.channel.id)) {
    let link = await filterLink(message.content)
    if (link != null) {
      let updated = await updateLink(link, message.channel)
      if (updated) {
        console.log('\n['.cyan, '!'.brightMagenta, ']'.cyan, `Link successfully Updated!`.brightGreen)
      }
    }
  }
})

字符串
服务器和处理程序:

router.post('/', async (req, res) => {
  let Link = req.headers.gamelink
  let linksCopy = links
  linksCopy[req.headers.target] = Link
  links = linksCopy
  res.sendStatus(200)
  console.log('\n['.cyan, '!'.brightMagenta, ']'.cyan, `Starting message sending...`.brightGreen)
  client.on('ready', async () => {
    console.log('\n['.cyan, '!'.brightMagenta, ']'.cyan, `Successfully logged in!`.brightGreen)
  })
  client.login("token")
  sendList.forEach( async (id) => {
    try {
      const channel = client.channels.cache.get(id)
      let lin = verifylinks(req.headers.target)
      if (channel) {
        channel.send(lin+"\n*Received from the selfbot!*")
      }
    } catch(error) {
      console.log(error)
    }
  }) 
})

module.exports = router;


我希望这将有助于任何人运行与类似的问题!

相关问题