From c30328bb95771055acf9ba48492fe30ea57d45d6 Mon Sep 17 00:00:00 2001 From: Bandie Date: Fri, 11 Jun 2021 19:15:28 +0200 Subject: [PATCH] Yip --- TelegramContactProtectionBot.py | 179 ++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100755 TelegramContactProtectionBot.py diff --git a/TelegramContactProtectionBot.py b/TelegramContactProtectionBot.py new file mode 100755 index 0000000..d3fccde --- /dev/null +++ b/TelegramContactProtectionBot.py @@ -0,0 +1,179 @@ +#!/usr/bin/python3 +from telegram import Update, Chat, ChatMember, ParseMode, ChatMemberUpdated, BotCommand + +from telegram.ext import Updater, CommandHandler, ChatMemberHandler, CallbackContext, MessageHandler, Filters + +import telegram +import logging +import os.path +import yaml + +configFilename='config.yml' + +config = {} + + +reply_markup = None +bot = telegram.Bot(token='1733773979:AAHUhDIA4jj8hIr_Cc90bSkgJ6U4L4doTew') +updater = Updater(token='1733773979:AAHUhDIA4jj8hIr_Cc90bSkgJ6U4L4doTew', use_context=True) +dispatcher = updater.dispatcher + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) + +def loadConfig(): + if(os.path.isfile(configFilename)): + global config + config.clear() + with open(configFilename, 'r') as filehandle: + try: + config = yaml.safe_load(filehandle) + except yaml.YAMLError as e: + logging.error(e) + +def saveConfig(): + with open(configFilename, 'w', encoding='utf8') as filehandle: + yaml.dump(config, filehandle, default_flow_style=False, allow_unicode=True) + +def setup(update: Update, context: CallbackContext): + global config + user = update.effective_user + config['adminID'] = user.id + config['name'] = user.first_name + saveConfig() + loadConfig() + logging.info("Bot claimed by " + config['name'] + ".") + context.bot.sendMessage(chat_id=update.effective_chat.id, text='You just claimed this bot, ' + config['name'] + '.') + +def setName(update: Update, context: CallbackContext): + if(context.args): + global config + config['name'] = " ".join(context.args) + saveConfig() + loadConfig() + logging.info('Name changed to ' + config['name']) + context.bot.sendMessage(chat_id=update.effective_chat.id, text='Your name is now ' + config['name'] + '.') + else: + context.bot.sendMessage(chat_id=update.effective_chat.id, text='You need at least one argument. Example: /setname Your Name') + + +def listBlacklist(update: Update, context: CallbackContext): + if(isAdmin): + global config + if('blacklist' in config): + bot.sendMessage(chat_id=config['adminID'], text="Currently blocked: \n" + "\n".join(config['blacklist'])) + else: + bot.sendMessage(chat_id=config['adminID'], text="Currently blocked: \nNothing at all.") + + +def isInBlacklist(userid): + if('blacklist' in config): + if(str(userid) in config['blacklist']): + logging.info("Blocked " + str(userid)) + return True + else: + logging.info("OK " + str(userid)) + return False + +def isAdmin(userid): + global config + if(userid == config['adminID']): + return True + else: + return False + +def block(update: Update, context: CallbackContext): + if(isAdmin): + if(context.args): + global config + if('blacklist' not in config): + config['blacklist'] = [] + config['blacklist'].append(context.args[0]) + saveConfig() + loadConfig() + logging.info("Blocked: " + context.args[0]) + bot.sendMessage(chat_id=config['adminID'], text="Blocked: " + context.args[0]) + +def unblock(update: Update, context: CallbackContext): + if(isAdmin): + if(context.args): + global config + if('blacklist' in config): + if(context.args[0] in config['blacklist']): + config['blacklist'].remove(context.args[0]) + saveConfig() + loadConfig() + logging.info("Unblocked: " + context.args[0]) + bot.sendMessage(chat_id=config['adminID'], text="Unblocked: " + context.args[0]) + + +def start(update: Update, context: CallbackContext): + reply_markup=telegram.ReplyKeyboardRemove() + if('name' in config): + context.bot.sendMessage(chat_id=update.effective_chat.id, text="Hello! " + config['name'] + " has set up a contact protection bot. To request contact, type /request.", reply_markup=reply_markup) + else: + context.bot.sendMessage(chat_id=update.effective_chat.id, text="Hello! This bot isn't claimed yet. Type /setup to claim.", reply_markup=reply_markup) + + +def forwardContact(update: Update, context: CallbackContext): + user = update.effective_user + if(isInBlacklist(user.id)): + return + + mesg = "\nID: " + str(user.id) + mesg +="\nUN: @" + str(user.username) + mesg +="\nFN: " + str(user.first_name) + mesg +="\nLN: " + str(user.last_name) + bot.sendMessage(chat_id=config['adminID'], text="Request by: " + mesg) + bot.send_contact(chat_id=config['adminID'], contact=update.message.contact) + reply_markup=telegram.ReplyKeyboardRemove() + context.bot.sendMessage(chat_id=update.effective_chat.id, text="Your contact information has been forwarded. " + config['name'] + " will eventually contact you back.", reply_markup=reply_markup) + +def request(update: Update, context: CallbackContext): + user = update.effective_user + if(isInBlacklist(user.id)): + return False + + logging.info("ID: " + str(user.id)) + logging.info("UN: " + str(user.username)) + logging.info("FN: " + str(user.first_name)) + logging.info("LN: " + str(user.last_name)) + + + if(user.username is None): + context.bot.send_message(chat_id=update.effective_chat.id, text="You don't have a public username set up in Telegram. This will make it hard to contact you back." + + " Please set up a username or share your phone number.") + reply_markup = telegram.ReplyKeyboardMarkup([[telegram.KeyboardButton('Share phone number', request_contact=True)]]) + context.bot.sendMessage(chat_id=update.effective_chat.id, text='Share phone number?', reply_markup=reply_markup) + + else: + mesg = "\nID: " + str(user.id) + mesg +="\nUN: @" + str(user.username) + mesg +="\nFN: " + str(user.first_name) + mesg +="\nLN: " + str(user.last_name) + + bot.sendMessage(chat_id=config['adminID'], text="Request by: " + mesg) + context.bot.send_message(chat_id=update.effective_chat.id, text="Your request has been sent. " + config['name'] + " will eventually contact you back.") + +loadConfig() + +commandsList = [] +commandsList.append(BotCommand(command='start', description='Information about this bot.')) +if('name' in config): + commandsList.append(BotCommand(command='request', description='Request ' + config['name'] + ' for contact')) + + +if('adminID' not in config): + dispatcher.add_handler(CommandHandler('setup', setup)) + commandsList.append(BotCommand(command='setup', description='Set yourself up as owner.')) + +bot.set_my_commands(commands=commandsList) + +dispatcher.add_handler(CommandHandler('start', start)) +dispatcher.add_handler(CommandHandler('block', block)) +dispatcher.add_handler(CommandHandler('blocklist', listBlacklist)) +dispatcher.add_handler(CommandHandler('unblock', unblock)) +dispatcher.add_handler(CommandHandler('setname', setName)) +dispatcher.add_handler(CommandHandler('request', request)) +dispatcher.add_handler(MessageHandler(Filters.contact, forwardContact)) + +updater.start_polling()