看来您正在使用 discord.js 的 v13,并且仍然具有一些 v12 语法。
First, channel.updateOverwrite()
is channel.permissionOverwrites.edit() https://discord.js.org/#/docs/main/stable/class/PermissionOverwriteManager?scrollTo=edit现在。第二,member.hasPermission()
became member.permissions.has() https://discord.js.org/#/docs/main/stable/class/Permissions?scrollTo=has与最新的主要更新。您可以阅读有关这些更改的更多信息Discordjs. 指南 https://discordjs.guide/additional-info/changes-in-v13.html.
另一个错误是您正在使用SEND_MESSAGE
标志,但它是SEND_MESSAGES
。还有一个,你正在使用filter
for createReactionCollector https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=createReactionCollector错误地。
查看下面的代码,它对我来说效果很好:
module.exports = {
name: 'ticket',
aliases: [],
permissions: [],
description: 'open a ticket!',
async execute(message, args, cmd, client, discord) {
const channel = await message.guild.channels.create(
`ticket: ${message.author.tag}`,
);
channel.setParent('932184344011898890');
channel.permissionOverwrites.edit(message.guild.id, {
SEND_MESSAGES: false,
VIEW_CHANNEL: false,
});
channel.permissionOverwrites.edit(message.author, {
SEND_MESSAGES: true,
VIEW_CHANNEL: true,
});
const reactionMessage = await channel.send(
'Thank you for contacting support!',
);
try {
await reactionMessage.react('????');
await reactionMessage.react('⛔');
} catch (err) {
channel.send('Error sending emojis!');
throw err;
}
const filter = (reaction, user) =>
message.guild.members.cache
.find((member) => member.id === user.id)
.permissions.has('ADMINISTRATOR');
const collector = reactionMessage.createReactionCollector({
dispose: true,
filter,
});
collector.on('collect', (reaction, user) => {
switch (reaction.emoji.name) {
case '????':
channel.permissionOverwrites.edit(message.author, { SEND_MESSAGES: false });
break;
case '⛔':
channel.send('Deleting this channel in 5 seconds!');
setTimeout(() => channel.delete(), 5000);
break;
}
});
message.channel
.send(`We will be right with you! ${channel}`)
.then((msg) => {
setTimeout(() => msg.delete(), 7000);
setTimeout(() => message.delete(), 3000);
})
.catch((err) => {
throw err;
});
},
};
清理原始代码后,我注意到您正在使用斜杠命令。这意味着你必须做出很多小改变。还有你原来的execute()
接收多个参数的方法(async execute(message, args, cmd, client, discord)
) 只收到一个;intereaction
.
这是用作斜杠命令的代码,我添加了一些注释来解释更改:
module.exports = {
name: 'ticket',
aliases: [],
permissions: [],
description: 'open a ticket!',
async execute(interaction) {
// message.guild is now interaction.guild
const channel = await interaction.guild.channels.create(
// message.author.tag is now interaction.user.tag
`ticket: ${interaction.user.tag}`,
);
channel.setParent('932184344011898890');
// message.guild is now interaction.guild
channel.permissionOverwrites.edit(interaction.guild.id, {
SEND_MESSAGES: false,
VIEW_CHANNEL: false,
});
// message.author is now interaction.member
channel.permissionOverwrites.edit(interaction.member, {
SEND_MESSAGES: true,
VIEW_CHANNEL: true,
});
// we're sending a reply with interaction.reply
// and use fetchReply so we can delete it after 7 seconds
const reply = await interaction.reply({
content: `We will be right with you! ${channel}`,
fetchReply: true,
});
setTimeout(() => {
reply.delete();
}, 7000);
const reactionMessage = await channel.send(
'Thank you for contacting support!',
);
try {
await reactionMessage.react('????');
await reactionMessage.react('⛔');
} catch (err) {
channel.send('Error sending emojis!');
throw err;
}
// you should also check if the user reacted is a bot
const filter = (reaction, user) =>
!user.bot &&
interaction.guild.members.cache
.get(user.id)
.permissions.has('ADMINISTRATOR');
const collector = reactionMessage.createReactionCollector({
dispose: true,
filter,
});
collector.on('collect', (reaction, user) => {
switch (reaction.emoji.name) {
case '????':
channel.permissionOverwrites.edit(interaction.member, {
SEND_MESSAGES: false,
});
break;
case '⛔':
channel.send('Deleting this channel in 5 seconds!');
setTimeout(() => channel.delete(), 5000);
break;
}
});
},
};