为什么当使用相同的权限邀请链接时,我的Discord机器人在除一台服务器外的所有服务器上都能工作



情况

我创建了一个简单的Discord机器人,它使用消息嵌入来运行文本风格的冒险任务。在通道中调用机器人时,它会记录调用它的用户的iD,并确保用户只能与按钮进行交互,当另一个用户尝试交互时会出现错误。我一直在我的个人服务器(和其他新服务器)上测试这个机器人,它一直工作得很好,在存储用户id和每次交互时都没有问题。

机器人程序只需要以下权限:查看消息/查看频道

管理消息

嵌入链接

发送消息

并发症

现在机器人程序和任务已经完成,我已经将其添加到我们打算运行它的服务器上(使用相同的权限链接),当用户启动机器人程序并单击播放按钮时,它会出现如下权限错误:(https://i.ibb.co/pWN0Hw1/unknown.png)这表明它没有存储正确启动命令的用户的用户iD,尽管它在其他服务器上运行良好(即用户可以继续任务而不会返回错误)。

完整代码的摘录涵盖了iD的存储并根据交互进行检查,如下所示:

const   { Client, Intents, MessageEmbed, MessageActionRow, MessageButton } = require('discord.js'),
client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES ] });
client.db = require("quick.db");
var config = {
token: "Removed",
prefix: "/",
adminID: "admin id",
embed_color: "#ffffff"
};

var quiz = require("./quiz.json");
client.login(config.token);
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
if ([null, undefined].includes(client.db.get(`quiz`))) client.db.set(`quiz`, {});
if ([null, undefined].includes(client.db.get(`quiz.spawns`))) client.db.set(`quiz.spawns`, {});
});
client.on('messageCreate', async (message) => {
if (!message.content.startsWith(config.prefix)) return;
const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift();

if (command == "unlock") {
message.delete();
const m = await message.channel.send(getMMenuPage());
client.db.set(`quiz.spawns.m${m.id}`, message.author.id);
}
});
client.on('interactionCreate', async (interaction) => {

if (interaction.isButton()) {
if (client.db.get(`quiz.spawns.m${interaction.message.id}`) != interaction.user.id) return interaction.reply(getMessagePermissionError(client.db.get(`quiz.spawns.m${interaction.message.id}`)));
const q = quiz; 

这是错误处理程序:

}
function getMessagePermissionError(ownerId) {
return {
embeds: [
new MessageEmbed()
.setTitle(`Permission Error`)
.setDescription(`This game was started by another user: <@${ownerId}>nIf you want to play by yourself, use the command **/unlock**`)
],
ephemeral: true
};
}

当应用完全相同的权限时,这在某些服务器上有效,但在特定的服务器上无效,这有什么原因吗?

谢谢你的帮助。

在我发现目标服务器将双因素身份验证(2fa)作为各种权限的标准要求后,我设法解决了这个错误,即使为用户/机器人提供了某些权限,如果没有2fa设置,他们也无法执行此操作。

我忘了为附加到机器人的帐户设置2fa。设置后,会返回上面的代码和所需的输出。

我希望这能帮助其他有同样问题的人。

相关内容

  • 没有找到相关文章

最新更新