# File: inline.py # Description: Inline wrapper # Author: Arvs100 # Date: 25-12-2019 ~ 28-12-2019 from telegram.ext import Updater, InlineQueryHandler, CommandHandler import logging from telegram import InlineQueryResultArticle, InputTextMessageContent, Bot import uuid import requests from telegram.utils.request import Request BOT_VERSION = "0.3" class Command: def __init__(self): self.desc = "" self.name = "" self.headerField = "" self.mode = "" def __init__(self, name, desc, mode, hf): self.desc = desc self.name = name self.headerField = hf self.mode = mode def setMode(self, mode): self.mode = mode def getMode(self): return self.mode def setDesc(self, desc): self.desc = desc def getDesc(self): return self.desc def getName(self): return self.name def setName(self, name): self.name = name def getCommand(self): return self.command def setHeaderField(self, param): self.headerField = param def getHeaderField(self): return self.headerField class Config: def __init__(self): self.apiUrl = "" self.apiId = "" self.apiPassword = "" self.botToken = "" def read(self, name): import configparser cfg = configparser.ConfigParser() cfg.read(name) self.apiUrl = cfg["Api"]["Url"] self.apiId = cfg["Api"]["Id"] self.apiPassword = cfg["Api"]["Password"] self.botToken = cfg["Bot"]["Token"] self.botConnectionPool = cfg["Bot"]["ConnectionPool"] def getApiUrl(self): return self.apiUrl def getApiId(self): return self.apiId def getApiPassword(self): return self.apiPassword def getBotToken(self): return self.botToken def getBotConnectionPool(self): return self.botConnectionPool class InlineBot: def __init__(self): self.errorText = "Sowwy mawster, an ewror occuwed. ;;w;;" self.commands = [] self.config = None self.__loadConfig() self.__makeCommands() def __loadConfig(self): self.config = Config() self.config.read("config.ini") def __makeCommands(self): self.commands.append(Command("Pony", "yay, ponies!", "imageurl", "imageurl")) self.commands.append(Command("Clop", "NSFW ponies", "imageurl", "imageurl")) self.commands.append(Command("Furry", "Furries", "imageurl", "imageurl")) self.commands.append(Command("Loli", "Cute lolis", "imageurl", "imageurl")) self.commands.append(Command("Yiff", "Yiff", "imageurl", "imageurl")) self.commands.append(Command("Lewd", "Say hi to the police", "imageurl", "imageurl")) self.commands.append(Command("Rasoio", "Dai facciamogli lo scherzo del rasoio!1!!", "genericurl", "htmldescription")) self.cancerCommand = Command("Cancer", "Search cancer", "imageurl", "imageurl") def callRequest(self, command, senderid, text = ""): if not command: return self.errorText r = requests.get(self.config.getApiUrl(), headers={ "botid":self.config.getApiId(), "botpassword":self.config.getApiPassword(), "command":command.getName().lower(), "replytouserid":"0", "senderuserid":senderid, "receiverchatid":"0", "querytext":text } ) if not r: return self.errorText if not "authorized" in r.headers or not "success" in r.headers or not command.getHeaderField() in r.headers: return self.errorText if r.headers["authorized"] != "true" or r.headers["success"] != "true" or r.headers[command.getHeaderField()] == "": return self.errorText return r.headers[command.getHeaderField()] def start(self): self.prequest = Request(con_pool_size=int(self.config.getBotConnectionPool())) self.bot = Bot(token=self.config.getBotToken(), request=self.prequest) self.updater = Updater(bot=self.bot,use_context=True) print("Inline bot v. {}".format(BOT_VERSION)) self.dispatcher = self.updater.dispatcher logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) self.logger = logging.getLogger(__name__) self.dispatcher.add_error_handler(self.errorHandler) inline_caps_handler = InlineQueryHandler(self.inlineQuery) self.dispatcher.add_handler(inline_caps_handler) print("Started!") self.updater.start_polling() self.updater.idle() def errorHandler(self, update, context): """Log Errors caused by Updates.""" self.logger.warning('Update "%s" caused error "%s"', update, context.error) def commandStart(self, update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Inline cancer, clop, furry spammer (h0nus)",parse_mode="HTML") def makeResult(self, command, senderid, querySearch = ""): if command == None: return InlineQueryResultArticle( id=uuid.uuid4().hex, type="article", title="Error", input_message_content=InputTextMessageContent("Error", "HTML"), description=self.errorText ) qValue = self.callRequest(command, senderid, querySearch) contentText = "" if command.getMode() == "imageurl": contentText = InputTextMessageContent("HonusBot", "HTML") elif command.getMode() == "genericurl": contentText = InputTextMessageContent("link", "HTML") else: contentText = InputTextMessageContent("Error", "HTML") return InlineQueryResultArticle( id=uuid.uuid4().hex, type="article", title=command.getName(), input_message_content=contentText, description=command.getDesc() ) def inlineQuery(self, update, context): senderid = str(update.inline_query.from_user.id) query = update.inline_query.query results = list() if not query: for command in self.commands: results.append(self.makeResult(command, senderid)) else: self.cancerCommand.setDesc("Search cancer about " + query) results.append(self.makeResult(self.cancerCommand, senderid, query)) context.bot.answer_inline_query(update.inline_query.id, results, 1, False) InlineBot().start()