@discordjs/voice
.Если я нахожу нужное, то оно на / команде, а мне нужно на префикс команду
await client.users.fetch('id', { force: true });
// или
await user.fetch();
user.bannerURL();
.fetch()
сначала проверяет кэш, прежде чем запросить данные из API. const roleIds = {
giveaways: 'id',
events: 'id',
}
const hasRole = (customId) => interaction.member.roles.cache.has(roleIds[customId]);
const getStyle = (customId) => hasRole(customId) ? ButtonStyle.Success : ButtonStyle.Danger;
const components = [
new ActionRowBuilder()
.setComponents(
new ButtonBuilder()
.setCustomId('giveaways')
.setLabel('Конкурсы')
.setStyle(getStyle('giveaways'))
),
new ActionRowBuilder()
.setComponents(
new ButtonBuilder()
.setCustomId('events')
.setLabel('Ивенты')
.setStyle(getStyle('events'))
),
]
const response = await interaction.reply({ components });
const collector = response.createMessageComponentCollector({
componentType: ComponentType.Button,
filter: (i) => i.user.id === interaction.user.id,
time: 60000,
});
collector.on('collect', async (i) => {
const { customId } = i;
const roleId = roleIds[customId];
if (hasRole(customId)) await i.member.roles.remove(roleId);
else await i.member.roles.add(roleId);
components
.flatMap((row) => row.components)
.find((component) => component.customId === customId)
.setStyle(getStyle(customId));
await i.update({ components });
});
collector.on('ignore', async (i) => await i.reply({ content: 'Не для вас', ephemeral: true }));
GuildPresences
добавляет участников в кэш, так как вы даете знать Discord Gateway, что хотите получать информацию о презенсах участников. Gateway отправляет клиенту эту информацию при старте и добавляет участников в кэш, НО только тех, кто не офлайн и не указал невидимый статус. Следовательно если у участника невидимый статус и он ни разу не взаимодействовал с ботом и он выйдет из сервера, то событие guildMemberRemove
будет проигнорировано, так как этого участника нет в кэше.Administrator
, а не KickMembers
.if
принимает только 1 параметр; вам следует использовать логическое И (&&) и подучить JavaScript. Как сделать, чтобы кнопка была доступна только для меня?
interactionCreate
проверяем, чтобы interaction.message.interaction.user.id
был равен interaction.user.id
.customId
кнопки добавляем id того, кто может использовать кнопку и сравниваем его с interaction.user.id
.Как сделать слушатель кнопки?
interactionCreate
client.on('interactionCreate', (interaction) => {
if (interaction.isButton()) {
// code here
}
});
const collector = <Message>.createMessageComponentCollector({ componentType: ComponentType.Button });
collector.on('collect', (interaction) => {
// code here
});
/app/node_modules/discord.js/src/client/actions/MessageCreate.js:11
const existing = channel.messages.cache.get(data.id);
^
TypeError: Cannot read properties of undefined (reading 'cache')
at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:11:41)
at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
at WebSocketShard.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)
at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:132:16)
at WebSocket.emit (node:events:527:28)
at Receiver.receiverOnMessage (/app/node_modules/ws/lib/websocket.js:1008:20)
at Receiver.emit (node:events:527:28)
at Receiver.dataMessage (/app/node_modules/ws/lib/receiver.js:517:14)
GuildVoiceStates
(v14), GUILD_VOICE_STATES
(v13).client.on("voiceStateUpdate", (oldState, newState) => {
if (!oldState.channelId && newState.channelId) {
// code
}
});
client.on("voiceStateUpdate", (oldState, newState) => {
if (oldState.channelId && !newState.channelId) {
// code
}
});
GUILDS
в опциях клиента.client.on("guildCreate", guild => {
const channel = guild.channels.cache.find(channel => channel.isText() && channel.permissionsFor(client.user).has(["VIEW_CHANNEL", "SEND_MESSAGES"]));
if (!channel) return;
channel.send("Worked!");
});