javascript - 尝试制作 Ticket Bot 但得到 TypeError: channel.updateOverwrite 不是函数
问题描述
我想制作一个票务系统,并在您对 ✅ 做出反应时在票证中仅从管理员那里查看频道。(关闭票证。)
代码:
if (reaction.emoji.name === "✅") {
if(!reaction.message.channel.name.includes('ticket-')) return
reaction.users.remove(user)
reaction.message.reactions.cache.get('✅').remove()
reaction.message.reactions.cache.get('❌').remove()
let channel = reaction.message
channel.updateOverwrite("user.id", { VIEW_CHANNEL: false });
}
错误:
TypeError: channel.updateOverwrite is not a function
解决方案
首先,channel
is not an instance of GuildChannel
but of Message
,这可能是一个错误。要获取相应的GuildChannel
对象,请使用以下命令:(正如 PerplexingParadox 在他们的评论中所说。)
let channel = reaction.message.channel;
接下来是该Collection.get()
方法接受一个键作为其参数,在本例中为反应 id(或Twitter Snowflake)。要按名称查找反应,您可以这样做:
for (const emojiName of ["✅", "❌"]) {
reaction.message.reactions.cache.find((reaction) => {
return reaction.emoji.name === emojiName;
})?.remove();
}
如果使用可选的链接运算符找到它们,则将它们删除。
最后GuildChannel.updateOverwrite()
接受RoleResolvable
orUserResolvable
作为它的第一个参数。传入用户的 id 是正确的,因为它属于UserResolvable
. 您可能不小心在user.id
. 它是一个变量,如果您希望它被视为删除引号,否则它将被视为仅是一个包含文本的字符串。并且不会起作用,因为文本“user.id”不是有效的 Twitter Snowflake。
channel.updateOverwrite(user.id, { VIEW_CHANNEL: false });
推荐阅读
- android - 如何在屏幕之间共享反应原生组件
- r - ggplot2 标题中的指数
- javascript - P5.js Visual(语法循环问题)
- c++ - 将 UBSAN 与动态加载的共享库一起使用
- mongodb - Mongoose 更新数组中对象的单个值
- c - void * 指针是否用于 C 中的泛型类型?
- php - 如何将此 SQL 查询转换为推进查询
- elasticsearch - Fluentd 日志充满了反斜杠,而 kibana 不显示 k8s pods 日志
- oracle - 如何提供多个绑定变量以在 pl/sql 块内立即执行
- java - 如何从 Maven 命令行读取环境变量并选择正确的属性文件