discord bot на js

oleg_nelasy

Участник
Сообщения
664
Реакции
46
В дискорд есть канал правила в нем можно ставить реакции которые уже есть. Конкретно там стоит одна. Нужно по айди реакции получить список айди тех кто поставил.
А по команде к примеру !role выдать роль с определённым айди если тот есть в списке полученном выше.
Ищу друга который поможет разобраться с написанием дискорд бота.
Написал сюда так как не совсем понимаю в какой раздел такое писать.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
В дискорд есть канал правила в нем можно ставить реакции которые уже есть. Конкретно там стоит одна. Нужно по айди реакции получить список айди тех кто поставил.
А по команде к примеру !role выдать роль с определённым айди если тот есть в списке полученном выше.
Ищу друга который поможет разобраться с написанием дискорд бота.
Написал сюда так как не совсем понимаю в какой раздел такое писать.
В раздел требуется или написание плагинов.
Оффтоп
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #3
В дискорд есть канал правила в нем можно ставить реакции которые уже есть. Конкретно там стоит одна. Нужно по айди реакции получить список айди тех кто поставил.
А по команде к примеру !role выдать роль с определённым айди если тот есть в списке полученном выше.
Ищу друга который поможет разобраться с написанием дискорд бота.
Написал сюда так как не совсем понимаю в какой раздел такое писать.
По message id:

Нужно по айди реакции получить список айди тех кто поставил.
 

MagoG

Хочу быть как truyn
Сообщения
896
Реакции
608
В дискорд есть канал правила в нем можно ставить реакции которые уже есть. Конкретно там стоит одна. Нужно по айди реакции получить список айди тех кто поставил.
А по команде к примеру !role выдать роль с определённым айди если тот есть в списке полученном выше.
Ищу друга который поможет разобраться с написанием дискорд бота.
Написал сюда так как не совсем понимаю в какой раздел такое писать.
Проще выдавать уже на "клик" по роли, а таких видео на ютубе, ой как много и есть также готовые.А айди взять не трудно, включить режим разработчика и нажать правой кнопкой по роли: "Скопировать ID", или же также по эмодзи.

Если так нужно, могу написать, как на js так и на python если интересует.Но, за денюжки естественное дело.
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
В дискорд есть канал правила в нем можно ставить реакции которые уже есть. Конкретно там стоит одна. Нужно по айди реакции получить список айди тех кто поставил.
А по команде к примеру !role выдать роль с определённым айди если тот есть в списке полученном выше.
Ищу друга который поможет разобраться с написанием дискорд бота.
Написал сюда так как не совсем понимаю в какой раздел такое писать.
Если Вы используете библиотеку discord.js, то Вам необходимо отлавливать событие добавления/удаления реакции на сообщение с помощью messageReactionAdd и messageReactionRemove, получите объект реакции и пользователя, который её поставил, далее уже дело кода. Также не забываем про кэш, который очень важен. Ваша задача отловить 2 события и написать несколько условий в них. Если необходима помощь, могу помочь разобраться в написании данного функционала и не только.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@xyligan, я использовал messageReactionAdd но столкнулся с проблемой как кешировать старое сообщение которое было добавлено до запуска бота. Находил такую вещь
client.channels.get(CHANNELID).fetchMessage(MESSAGEID); но получал ошибку client.channels.get не функция. Тем более при этом методе мне надо еще как-то делать проверку чтоб реакция была на конкретном сообщении, если сообщение не то return.

@White Wolf, Простите меня дурочка за очень глупые вопросы.
JavaScript:
var getReactedUsers = async(msg, channelID, messageID, emoji) => {
    let cacheChannel = msg.guild.channels.cache.get(channelID);
    if(cacheChannel){
        cacheChannel.messages.fetch(messageID).then(reactionMessage => {
            reactionMessage.reactions.resolve(emoji).users.fetch().then(userList => {
                return userList.map((user) => user.id)
            });
        });
    }
}
Я не совсем понял как здесь передать id конкретного сообщения.


GET/channels/{channel.id}/messages/{message.id}/reactions/{emoji}
Объясните магию этой строки пожалуйста из нее я понял то должна выглядеть как-то так?
let Users = GET.channel('id').message(id').reactions(id');
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
@xyligan, я использовал messageReactionAdd но столкнулся с проблемой как кешировать старое сообщение которое было добавлено до запуска бота. Находил такую вещь
client.channels.get(CHANNELID).fetchMessage(MESSAGEID); но получал ошибку client.channels.get не функция. Тем более при этом методе мне надо еще как-то делать проверку чтоб реакция была на конкретном сообщении, если сообщение не то return.
Простой пример кэширования сообщения.

JavaScript:
import Event from '../interfaces/Event';

import { MessageReaction, User } from 'discord.js';

export = {
    name: 'messageReactionAdd',

    async run(client, reaction: MessageReaction, user: User) {
        if(user.bot) return;

        if(reaction.message.partial) {
            try {
                const message = await reaction.message.fetch();
                const messageID = message.id;
            
                // your code...
            }catch(error) {
                return console.log(error);
            }
        }else{
            const message = reaction.message;
            const messageID = reaction.message.id;

            // your code...
        }
    }
} as Event;
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Cannot read properties of undefined (reading 'fetchMessage')
Непонятно для кого придумали документацию, читайте
 
Сверху Снизу