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

← К списку тем

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

Авторизуйтесь через Telegram, чтобы ответить.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.


Ответы

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

          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 людей
          Abat 20.11.2020 в 19:31
          • 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;
            iMakeBots 20.11.2020 в 19:33
            • Хорошо тогда кто то лайкнут к посту появиться новая ряд для каждого юзера правильно?
              Abat 20.11.2020 в 19:42
            • Ну это смотря какая у вас логика описана для бота.
              iMakeBots 20.11.2020 в 19:49
  • 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
            ]);
        }
    Abat 20.11.2020 в 19:59
    • Это у вас вывод сообщения с кнопками
      А логика обработки нажатия на реакции?
      iMakeBots 20.11.2020 в 20:04
      • 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:09
        • Вот
          Abat 20.11.2020 в 20:20
        • Вроде норм
          iMakeBots 21.11.2020 в 11:07
          • Но я боюсь, когда многие люди нажимают, сервер может быть нагрузится
            Abat 21.11.2020 в 12:57