• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Python Like Telegram bot на Python

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Собственно был задан вопрос в этой теме https://vlmi.top/threads/telegram-like_buttons.26727/
И раз уж начал там писать, решил выложить наработки по данной теме. На данный момент, бот умеет добавлять кнопки лайков и дизлайков к добавленным вами сообщениям, на канале. Все в автоматическом режиме, ничего боту писать не нужно.

Для работы данного бота, нужен Python версии 3 и установить зависимости в PIP:

pip install pyTelegramBotAPI

Перед началом работы, нужно назначить бота администратором в вашем канале и сделать репост любого сообщения с канала, боту, это нужно для того что бы бот смог начать работу с каналом, больше взаимодействие с ботом не требуется.

Создаем 2 скрипта:
Код:
import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
from db import SQLite, DBRequest

TOKEN = # Telegram токен
PATH_DB = 'db.sqlite' # Путь к базе данных

bot = telebot.TeleBot(TOKEN)
db = DBRequest(SQLite(PATH_DB))

def post_markup(like_yes='', like_not=''):
  markup = InlineKeyboardMarkup()
  item1 = InlineKeyboardButton('? {0}'.format(like_yes), callback_data=f'yes')
  item2 = InlineKeyboardButton('? {0}'.format(like_not), callback_data=f'not')
  markup.add(item1, item2)

  return markup

@bot.channel_post_handler()
def channel_post(message):
  db.new_post([None, message.chat.id, message.message_id, 0, 0])
  bot.edit_message_reply_markup(message.chat.id, message.message_id, reply_markup=post_markup())

@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
  data = db.select_post([call.message.chat.id, call.message.message_id])

  if call.data == 'yes':
    num = data[0][3] + 1
    db.new_like_yes([num, call.message.chat.id, call.message.message_id])
    bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup=post_markup(num, data[0][4]))
    bot.answer_callback_query(call.id, 'Нравится')
  elif call.data == 'not':
    num = data[0][4] + 1
    db.new_like_not([num, call.message.chat.id, call.message.message_id])
    bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup=post_markup(data[0][3], num))
    bot.answer_callback_query(call.id, 'Не нравится')

if __name__ == '__main__':
  db.create()
  bot.polling()

И скрипт для работы с базой данных:
Код:
import sqlite3

class SQLite():
  def __init__(self, db):
    self.db = db

  def __enter__(self):
    self.conn = sqlite3.connect(self.db)
    self.conn.row_factory = sqlite3.Row
    
    return self.conn.cursor()

  def __exit__(self, type, value, traceback):
    self.conn.commit()
    self.conn.close()

class DBRequest():
  def __init__(self, sqlite):
    self.sqlite = sqlite
 
  def create(self):
    with self.sqlite as db:
      db.execute("""
        CREATE TABLE IF NOT EXISTS post (
          id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          channel_id INTEGER NOT NULL,
          post_id INTEGER NOT NULL,
          like_yes INTEGER NOT NULL,
          like_not INTEGER NOT NULL
        )
      """)

  def new_post(self, data):
    with self.sqlite as db:
      db.execute("INSERT INTO post VALUES (?, ?, ?, ?, ?)", data)

  def select_post(self, data):
    with self.sqlite as db:
      db.execute("SELECT * FROM post WHERE channel_id = ? AND post_id = ? LIMIT 1", data)

      return db.fetchall()

  def new_like_yes(self, data):
    with self.sqlite as db:
      db.execute("UPDATE post SET like_yes = ? WHERE channel_id = ? AND post_id = ?", data)

  def new_like_not(self, data):
    with self.sqlite as db:
      db.execute("UPDATE post SET like_not = ? WHERE channel_id = ? AND post_id = ?", data)

Запускаем main.py и бот готов к работе. Теперь при добавлении нового сообщения на канал, бот автоматически добавит к нему кнопки, а так же будет считать количество лайков и дизлайков. На данный момент это все, контроль того кто добавил лайк или убрал можете написать сами, или по заявкам желающих могу продолжить.

Screenshot_1.png
 
Сверху Снизу