Compare commits

..

5 Commits

Author SHA1 Message Date
7d4fe425eb Disable in groups 2019-01-07 20:25:48 +05:30
579fafd7b1 Don't tag in group 2019-01-07 17:52:34 +05:30
b71174918b Show who voted when the image is forwarded. 2019-01-07 17:37:02 +05:30
d04ddba9a3 Update Readme 2019-01-07 01:21:39 +05:30
e27b55fe01 Complete click. 2019-01-07 00:56:03 +05:30
2 changed files with 78 additions and 1 deletions

View File

@@ -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
View File

@@ -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()