提问人:KILLXR 提问时间:11/13/2023 最后编辑:SkullyKILLXR 更新时间:11/16/2023 访问量:34
获取当前通道 disocrd.js-selfbot
fetching current channels disocrd.js-selfbot
问:
我正在使用并且遇到了一个问题,如果 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)}
})
}
}
}
})
答:
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;
我希望这对任何遇到类似问题的人都有所帮助!
评论