Discord.js 客户端问题
Posted
技术标签:
【中文标题】Discord.js 客户端问题【英文标题】:Discord.js Client issue 【发布时间】:2021-02-25 18:21:59 【问题描述】:今天我尝试使用 express 路由器和 discord.js,但出现错误:无法读取未定义的属性“通道”。我不知道问题出在哪里。也许我设置了错误的路径。感谢您的帮助。
//app.js
const express = require('express')
const router = express.Router()
const discord = require('discord.js')
const client = new discord.Client()
router.get('/', (req, res) =>
res.render('register',
title: 'Register'
)
)
router.get('/Dashboard', (req, res) =>
var chans = []
client.guilds.cache.first().channels.cache
.filter(c => c.type == 'text')
.forEach(c =>
chans.push( id: c.id, name: c.name )
)
res.render('dashboard',
title: "Dashboard",
chans,
)
)
router.post('/sendMessage', (req, res) =>
var channelid = req.body.channelid
var text = req.body.text
if (!channelid || !text)
return res.sendStatus(400);
var chan = client.guilds.cache.first().channels.cache.get(channelid)
if (chan)
chan.send(text)
res.sendStatus(200)
else
res.sendStatus(406)
)
module.exports = router
【问题讨论】:
【参考方案1】:为了使用 Discord 客户端并访问其频道,您必须首先使用您的令牌登录
await client.login(token_here)
或
client.login(token_here).then(() => ...)
并且 Tomedic 是正确的,您使用的是 v11 和 v12 语法的混合,如果您阅读 v12 discord.js 文档,您会发现您可以通过这样做直接获取您的频道
let channel = await client.channels.fetch(channel_id)
或
client.channels.fetch(channel_id).then((channel) => ...)
【讨论】:
【参考方案2】:替换:
var chan = client.guilds.cache.first().channels.cache.get(channelid)
用这个:
var chan = client.guilds.cache.first().channels.cache.fetch(channelid)
【讨论】:
以上是关于Discord.js 客户端问题的主要内容,如果未能解决你的问题,请参考以下文章
Express RESTful API 中的 Discord.js
具有用户权限、客户端权限和限制的 Discord.js 命令处理程序
Discord.js JavaScript 不和谐客户端无缘无故断开和重新连接
Discord JS:UnhandledPromiseRejectionWarning:错误:Shard 的客户端准备就绪时间过长