Quiero cambiar el nombre de un bot de Discord y he leído numerosos tutoriales y publicaciones de Stack Overflow y todavía no puedo obtenerlo. El código se toma principalmente del código de bot de código abierto, por lo que sé que funciona (¿algo con la configuración de mi bot, tal vez?)
Según tengo entendido, este código recorre cada gremio del que es miembro el bot y establece el apodo.
Encontré el botId haciendo clic con el botón derecho en el bot en el canal y copiando el ID.
const { guildId } = require('../config'); module.exports = (client, botId, nickname) => { client.guilds.cache.forEach((guild) => { const { id } = guild; client.guilds.cache .get(id) .members.cache.get(botId) .setNickname(nickname); }); };El bot aparece en el canal (después de usar la url oauth2), así que asumo que eso significa que es miembro del gremio.
Sin embargo, al ejecutar este código no se encuentra el bot. Probé varias cosas de otras publicaciones como guild.array() para intentar ver una lista completa de los miembros del gremio, pero nada funcionó.
const guild = client.guilds.cache.get('943284788004012072'); const bot = guild.members.cache.get('956373150864642159') if (!bot) return console.log('bot not found');Aquí está el bot completo
require('dotenv').config(); const { Client, Intents } = require('discord.js'); const eventBus = require('../utils/events/eventBus'); const setNickname = require('../utils/setNickname'); const getPrice = require('../modules/statsGetters/getPriceDEX'); const { bots } = require('../config'); const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES], }); client.once('ready', async () => { console.log('DEX Price Watch Bot Ready'); client.user.setPresence({ activities: [{ name: 'DEX Price', type: 'WATCHING' }], status: 'online', }); const price = await getPrice(); setNickname(client, bots.priceDEX, price); eventBus.on(drip.update, async () => { const price = await getPrice(); setNickname(client, bots.priceDEX, price); //update price in config file }); }); client.login(process.env.DISCORD_PRICE_DEX);Esta es la muestra de cómo cambiar el apodo del bot para cada gremio al que se unió el bot
client.guilds.cache.forEach((guild) => { //This is to get all guild that the bot joined const nickname = args.slice(0).join(" ") //You wanted to change nickname guild.me.setNickname(nickname); //setting the nickname of your bot });Creo que lo estás haciendo mal. Documentos: https://discord.js.org/#/docs/discord.js/stable/class/GuildMember?scrollTo=setNickname
Sugeriría usar este código de módulo:
const { guildId } = require('../config'); module.exports = (client, nickname) => { client.guilds.cache .get(guildId).me.setNickname(nickname); }; Y úsalo de esta manera en tu código de bot principal: setNickname(client, price)
Editar: Oh, espera, me acabo de dar cuenta de que no usaste las intenciones correctas (miembros del gremio), por lo que definitivamente necesitas usar guild.me (como lo escribí anteriormente) o usar guild.members.fetch() ya que busca miembros que no están en caché. Más información: https://discord.js.org/#/docs/discord.js/stable/class/GuildMemberManager?scrollTo=fetch