Compare commits
5 Commits
1a4db8d2c5
...
master
Author | SHA1 | Date | |
---|---|---|---|
7d4fe425eb | |||
579fafd7b1 | |||
b71174918b | |||
d04ddba9a3 | |||
e27b55fe01 |
@@ -1,2 +1,3 @@
|
|||||||
# Channel-Poll-Bot
|
# Channel-Poll-Bot
|
||||||
|
|
||||||
|
A bot to hold polling in [@quadnite_\_pfp](https://t.me/quadnite_pfp)
|
||||||
|
78
bot.py
78
bot.py
@@ -4,7 +4,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import config
|
import config
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from telegram.ext import Updater, MessageHandler, Filters
|
from telegram.ext import Updater, MessageHandler, CallbackQueryHandler, Filters
|
||||||
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
|
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
|
||||||
|
|
||||||
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - \
|
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - \
|
||||||
@@ -37,8 +37,72 @@ def add_vote(db, callback_id, user=None):
|
|||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def delete_vote(db, callback_id, user):
|
||||||
|
user_id = user.id
|
||||||
|
query = "DELETE FROM poll WHERE callback=? AND user_id=?"
|
||||||
|
cursor.execute(query, (callback_id, user_id))
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def check_vote(db, callback_id, user):
|
||||||
|
user_id = user.id
|
||||||
|
cursor = db.cursor()
|
||||||
|
query = ("SELECT * FROM poll WHERE callback=? AND user_id=?")
|
||||||
|
cursor.execute(query, (callback_id, user_id))
|
||||||
|
if cursor.fetchone():
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def update_message(bot, db, callback_id):
|
||||||
|
cursor = db.cursor()
|
||||||
|
query = "SELECT message_id FROM message_ids WHERE callback = ?"
|
||||||
|
cursor.execute(query, (callback_id,))
|
||||||
|
message_id = cursor.fetchone()[0]
|
||||||
|
query = "SELECT count(user_id) FROM poll WHERE callback = ?"
|
||||||
|
cursor.execute(query, (callback_id,))
|
||||||
|
count = cursor.fetchone()[0]
|
||||||
|
keyboard = InlineKeyboardMarkup([[InlineKeyboardButton(
|
||||||
|
text=f"❤️ {count}",
|
||||||
|
callback_data=callback_id)]])
|
||||||
|
bot.edit_message_reply_markup(chat_id=config.channel_id,
|
||||||
|
message_id=message_id,
|
||||||
|
reply_markup=keyboard)
|
||||||
|
|
||||||
|
|
||||||
|
def send_stats(bot, update, db, tag):
|
||||||
|
cursor = db.cursor()
|
||||||
|
query = ("SELECT user_id, name FROM poll NATURAL JOIN message_ids WHERE "
|
||||||
|
"message_id = ?")
|
||||||
|
cursor.execute(query, (update.message.forward_from_message_id,))
|
||||||
|
voters = []
|
||||||
|
for row in cursor:
|
||||||
|
voters.append(row)
|
||||||
|
if len(voters) == 0:
|
||||||
|
bot.send_message(chat_id=update.message.chat_id, text="No Votes")
|
||||||
|
else:
|
||||||
|
text = "Voters\n"
|
||||||
|
for i in voters:
|
||||||
|
if tag:
|
||||||
|
text += f"<a href='tg://user?id={i[0]}'>{i[1]}</a>\n"
|
||||||
|
else:
|
||||||
|
text += f"{i[1]}\n"
|
||||||
|
bot.send_message(chat_id=update.message.chat_id, text=text,
|
||||||
|
parse_mode="HTML")
|
||||||
|
|
||||||
|
|
||||||
def post(bot, update, db):
|
def post(bot, update, db):
|
||||||
chat_id = update.message.chat_id
|
chat_id = update.message.chat_id
|
||||||
|
user_id = update.message.from_user.id
|
||||||
|
if (update.message.forward_from_chat and
|
||||||
|
update.message.forward_from_chat.id == config.channel_id and
|
||||||
|
user_id in config.allowed_users):
|
||||||
|
tag = (chat_id == user_id)
|
||||||
|
send_stats(bot, update, db, tag)
|
||||||
|
return
|
||||||
|
if chat_id < 0:
|
||||||
|
return
|
||||||
if chat_id in config.allowed_users:
|
if chat_id in config.allowed_users:
|
||||||
callback_id = get_callback_id(db)
|
callback_id = get_callback_id(db)
|
||||||
photo = update.message.photo[0]
|
photo = update.message.photo[0]
|
||||||
@@ -52,6 +116,17 @@ def post(bot, update, db):
|
|||||||
bot.send_message(chat_id=chat_id, text="Not Authorized")
|
bot.send_message(chat_id=chat_id, text="Not Authorized")
|
||||||
|
|
||||||
|
|
||||||
|
def click(bot, update, db):
|
||||||
|
user = update.callback_query.from_user
|
||||||
|
callback_id = update.callback_query.data
|
||||||
|
if not check_vote(db, callback_id, user):
|
||||||
|
add_vote(db, callback_id, user)
|
||||||
|
else:
|
||||||
|
delete_vote(db, callback_id, user)
|
||||||
|
update_message(bot, db, callback_id)
|
||||||
|
bot.answer_callback_query(update.callback_query.id)
|
||||||
|
|
||||||
|
|
||||||
updater = Updater(token=config.api_key)
|
updater = Updater(token=config.api_key)
|
||||||
dispatcher = updater.dispatcher
|
dispatcher = updater.dispatcher
|
||||||
|
|
||||||
@@ -60,4 +135,5 @@ cursor = db.cursor()
|
|||||||
|
|
||||||
dispatcher.add_handler(MessageHandler(Filters.photo, lambda x, y: post(x,
|
dispatcher.add_handler(MessageHandler(Filters.photo, lambda x, y: post(x,
|
||||||
y, db)))
|
y, db)))
|
||||||
|
dispatcher.add_handler(CallbackQueryHandler(lambda x, y: click(x, y, db)))
|
||||||
updater.start_polling()
|
updater.start_polling()
|
||||||
|
Reference in New Issue
Block a user