获取当前通道 disocrd.js-selfbot

fetching current channels disocrd.js-selfbot

提问人:KILLXR 提问时间:11/13/2023 最后编辑:SkullyKILLXR 更新时间:11/16/2023 访问量:34

问:

我正在使用并且遇到了一个问题,如果 X 条件为真,机器人会获取一个需要向其发送消息的频道列表,但是如果用户被禁止加入公会,它会抛出一个错误,说消息访问。discord.js-selfbot-v13

有什么方法可以让它获取当前可用的通道而不是缓存的通道?当用户被禁止时,缓存的通道会由于某种原因保留在那里,那么是否可以在每次循环发生时将缓存重新获取到最新版本?

我尝试使用 和 ,两者都会产生相同的错误,即查找不存在的通道。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)}
            })
         }
      }
    }
})
节点.js 不和谐 不和谐.js

评论


答:

1赞 Skully 11/15/2023 #1

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

虽然您可以使用您的个人帐户令牌获取缓存的频道以使用 discord.js 进行身份验证,但由于自机器人,Discord API 的功能显着减少和限制,并且您没有与机器人令牌相同的功能,例如特权网关意图,特别是意图,这是您尝试执行的操作所必需的。GUILD_MEMBERS

因此,在缓存中有权访问的通道将仅是发出客户端订阅的任何事件的通道,这些事件接收更新(例如用户消息)。您尝试实现的目标在功能上无法通过自我机器人实现。

0赞 KILLXR 11/15/2023 #2

我想出了一种可能对遇到相同问题的人有帮助的方法或解决方法,即将机器人分成两个机器人,一个监视,然后使用快速服务器将数据发送给另一个机器人,这是它的代码

第一个自我机器人:

// 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;

我希望这对任何遇到类似问题的人都有所帮助!