当前位置: 首页 > 知识库问答 >
问题:

如何使用公会ID获取公会对象

裴嘉良
2023-03-14

我想更改我的机器人所在的特定公会的图标。为此,我需要使用guild.setIcon()方法。我已经有了公会的ID,但我不知道如何把它变成我可以使用的对象。

guildId常量作为字符串存储在config中。json。

这是我的index.js,我试图运行代码。

// Require the necessary discord.js classes
const { Client, Collection, Intents } = require("discord.js");
const { token, guildId } = require("./config.json");
const fs = require("fs");

// Create a new client instance
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

client.commands = new Collection();
const commandFiles = fs
  .readdirSync("./commands")
  .filter((file) => file.endsWith(".js"));

for (const file of commandFiles) {
  const command = require(`./commands/${file}`);
  client.commands.set(command.data.name, command);
}

const eventFiles = fs
  .readdirSync("./events")
  .filter((file) => file.endsWith(".js"));

for (const file of eventFiles) {
  const event = require(`./events/${file}`);
  if (event.once) {
    client.once(event.name, (...args) => event.execute(...args));
  } else {
    client.on(event.name, (...args) => event.execute(...args));
  }
}

client.on("interactionCreate", async (interaction) => {
  if (!interaction.isCommand()) return;

  const command = client.commands.get(interaction.commandName);

  if (!command) return;

  try {
    await command.execute(interaction);
  } catch (error) {
    console.error(error);
    await interaction.reply({
      content: "There was an error while executing this command!",
      ephemeral: true,
    });
  }
});

client.login(token);

const myGuild = client.guilds.cache.get(guildId)
myGuild.setIcon("./images/image.png");

我得到的错误是

myGuild.setIcon("./images/image.png");
        ^

TypeError: Cannot read properties of undefined (reading 'setIcon')

共有2个答案

漆雕嘉平
2023-03-14

你的问题来自这样一个事实:你正试图从你的机器人缓存中获取公会,但他在它的缓存中没有

首先,你必须等待你的机器人成功连接
然后,你不应该直接从缓存中读取,使用GuildManager方法(这里你需要提取

总而言之,将您的index.js的最后两行替换为

client.on("ready", async () => {
    const myGuild = await client.guilds.fetch(guildId)
    myGuild.setIcon("./images/image.png")
})
林泰平
2023-03-14

你需要在活动中这样做。在客户端准备就绪之前,不会缓存公会

client.on("ready", async () => {
  const myGuild = client.guilds.cache.get(guildId)
  await myGuild.setIcon("./images/image.png")
})
 类似资料:
  • 我正在尝试制作一个Minecraft客户端,但我不知道如何获取会话ID来启动游戏。我在google上搜索了一下,但无论如何都找不到从命令行启动Minecraft的答案——用户名和密码作为前缀不起作用。

  • 所以用我的代码,如果当前公会id与特定公会id相同,我想打印一条消息到控制台。bot应该检查数据库中列出的每台服务器。 这就是我的代码: 错误是ctx.guild.id不起作用,因为他找不到“ctx”。有没有其他方法可以让bot从我的数据库中遍历每个guildid行,并检查当前的行id是否与数据库中的行id相同?

  • 问题内容: 如何获取烧瓶上的复选框是否已选中我正在使用Flask开发服务器环境使用Flask,Gevent和Web套接字进行项目。我用过。这里 如何获得每个连接的唯一会话ID? 我想将其存储在数据库中,并在客户端断开连接后将其删除。 如何获得活动连接总数 问题答案: 没有会话ID。 Flask中的会话只是Cookie的包装。你保存在上面的内容经过数字签名,并以cookie的形式发送给客户端。当你发

  • 问题内容: 如何使用python2.7获取公共IP?不是私有IP。 问题答案: 当前有几种选择: ip.42.pl jsonip.com httpbin.org ipify.org 以下是可以利用上述每种方法的确切方法。 ip.42.pl 这是我找到的第一个选项。对于脚本来说非常方便,您不需要在这里进行JSON解析。 jsonip.com 似乎该域的唯一目的是返回JSON中的IP地址。 httpb

  • 问题内容: 我想在学习活动中构建一个简单的Web应用程序。如果遇到首次访问者,Webapp应该要求用户输入他们的email_id,否则它会通过cookie记住用户并自动登录以执行功能。 这是我第一次创建基于用户的Web应用程序。我心中有一个蓝图,但是我无法弄清楚如何实现它。首先,我对收集用户cookie的方式感到困惑。我研究了各种教程和flask_login,但是与flask_login所实现的相

  • 问题内容: 我在与Express运行相同的端口上使用WebSockets 。 我想从刚刚建立并升级到WebSocket的HTTP连接中获取关联的“ sessionID”。 如何才能做到这一点? (我目前通过在页面中发送sessionID解决此问题,但这很丑陋。) 问题答案: 解析Cookie 获取会话ID 获取会话数据