← Вернуться к списку тем

Открыть бот для реакций под постов?

Здравствуйте. Хочу открыть бот как @like. У меня все работает но но у меня такая проблема. Как можно знать тот человек который уже лайкнул (думал записать telegram_id пользователя но как можно реализовать?).

Ответы


  • iMakeBots [20.11.2020 в 18:51 → Abat]
    определяете id поста и id пользователя - если в базе есть по ним совпадения - значит пользователь уже нажимал реакции
    id поста зашиваете в кнопки реакций
  • Abat [20.11.2020 в 19:11 → iMakeBots]
    Можете сделать пример для SQL база пожалуйста?
  • iMakeBots [20.11.2020 в 19:15 → Abat]
    SELECT * FROM table WHERE id_post = 1 AND id_user = 123456
  • Abat [20.11.2020 в 19:31 → iMakeBots]
    Вот мой БД так выглядят

    CREATE TABLE 'reaction' (
      'id' int(11) NOT NULL,
      'id_post' bigint(20) NOT NULL,
      'like_id' varchar(32) DEFAULT NULL,
      'dislike_id' varchar(32) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    как можно добавить user_id если лайкнуть 1000 людей
  • iMakeBots [20.11.2020 в 19:33 → Abat]
    CREATE TABLE 'reaction' (
      'id' int(11) NOT NULL,
      'id_post' int(11) NOT NULL,
      'user_id' bigint(20) DEFAULT NULL,
      'like_id' int(11) DEFAULT NULL,
      'dislike_id' int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • Abat [20.11.2020 в 19:42 → iMakeBots]
    Хорошо тогда кто то лайкнут к посту появиться новая ряд для каждого юзера правильно?
  • iMakeBots [20.11.2020 в 19:49 → iMakeBots]
    Ну это смотря какая у вас логика описана для бота.
  • Abat [20.11.2020 в 19:59 → Abat]
    if($data->is_channel) {
           
            $id = uniqid();
    
            $chan = [
                [['text' => '?', 'callback_data' => 'like_' . $id], ['text' => '?', 'callback_data' => 'dislike_' . $id]],
                [['text' => 'Поделиться', 'url' => 'https://telegram.me/share/url?url=https://telegram.me/' . $data->username . '/' . $data->message_id]]
            ]; $chan_btn = $telegram->buildInlineKeyBoard($chan);
    
            $db->insert('reaction', [
                'id_post' => $data->message_id,
                'like_id' => 'like_' . $id,
                'dislike_id' => 'dislike_' . $id
            ]);
         
            $telegram->editMessageReplyMarkup([
                'chat_id' => $data->chat_id,
                'message_id' => $data->message_id,
                'reply_markup' => $chan_btn
            ]);
        }
  • iMakeBots [20.11.2020 в 20:04 → Abat]
    Это у вас вывод сообщения с кнопками
    А логика обработки нажатия на реакции?
  • Abat [20.11.2020 в 20:09 → iMakeBots]
    if ($data->callback_query) {
    
        if (preg_match('/like_.*/', $data->text) ) {
            $data_inline = explode('_', $data->text);
            $reaction = $data_inline[0];
            $id = $data_inline[1];
            $liked_user = $db->get('reactions', 'user_id', ['user_id' => $data->user_id]);
            $i = $db->select("SELECT * FROM 'reactions' WHERE 'like_id' = ". $data->text)->rowCount();;
    
            if($data_inline[0] == 'like' && $liked_user == false) {
    
                $db->update('reactions', [
                    'id_post' => $data->message_id,
                    'user_id' => $data_id
                ]);
    
                $telegram->answerCallbackQuery([
                    'callback_query_id' => $data->callback_query_id, 
                    'text' => 'Спасибо за лайк', 
                    'show_alert' => false
                ]);
    
                $chan = [
                    [['text' => '?' . ++$i, 'callback_data' => 'like_' .$id], ['text' => '?', 'callback_data' => 'dislike_' .$id]],
                    [['text' => 'Поделиться', 'url' => 'https://telegram.me/share/url?url=https://telegram.me/' . $data->username . '/' . $data->message_id]]
                ]; $chan_btn = $telegram->buildInlineKeyBoard($chan);
    
                $telegram->editMessageReplyMarkup([
                    'chat_id' => $data->chat_id,
                    'message_id' => $data->message_id,
                    'reply_markup' => $chan_btn
                ]);
    
            } else {
    
                $telegram->answerCallbackQuery([
                    'callback_query_id' => $data->callback_query_id, 
                    'text' => 'Вы уже лайкули', 
                    'show_alert' => false
                ]);
    
            }
        }
    }
  • Abat [20.11.2020 в 20:20 → Abat]
    Вот
  • iMakeBots [21.11.2020 в 11:07 → Abat]
    Вроде норм
  • Abat [21.11.2020 в 12:57 → iMakeBots]
    Но я боюсь, когда многие люди нажимают, сервер может быть нагрузится