HonusBot/inline.py

219 lines
5.5 KiB
Python
Raw Normal View History

2020-03-09 00:34:04 +01:00
# File: inline.py
# Description: Inline wrapper
2019-12-28 21:57:04 +01:00
# 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
2020-03-09 01:05:49 +01:00
BOT_VERSION = "0.3"
class Command:
2019-12-28 21:57:04 +01:00
def __init__(self):
2020-03-09 01:05:49 +01:00
self.desc = ""
self.name = ""
self.headerField = ""
self.mode = ""
2019-12-28 21:57:04 +01:00
2020-03-09 01:05:49 +01:00
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
2019-12-28 21:57:04 +01:00
2020-03-09 01:05:49 +01:00
def setName(self, name):
self.name = name
def getCommand(self):
return self.command
2019-12-28 21:57:04 +01:00
2020-03-09 01:05:49 +01:00
def setHeaderField(self, param):
self.headerField = param
def getHeaderField(self):
return self.headerField
2020-03-09 01:18:21 +01:00
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"]
def getApiUrl(self):
return self.apiUrl
def getApiId(self):
return self.apiId
def getApiPassword(self):
return self.apiPassword
def getBotToken(self):
return self.botToken
2020-03-09 01:05:49 +01:00
class InlineBot:
def __init__(self):
self.apiUrl = password.API_URL
2019-12-28 21:57:04 +01:00
self.errorText = "Sowwy mawster, an ewror occuwed. ;;w;;"
2020-03-09 01:05:49 +01:00
self.commands = []
2020-03-09 01:18:21 +01:00
self.config = None
2020-03-09 01:05:49 +01:00
2020-03-09 01:40:39 +01:00
self.__loadConfig()
2020-03-09 01:05:49 +01:00
self.__makeCommands()
2019-12-28 21:57:04 +01:00
2020-03-09 01:18:21 +01:00
def __loadConfig(self):
self.config = Config()
self.config.read("config.ini")
2020-03-09 01:05:49 +01:00
def __makeCommands(self):
cmd = Command()
cmd.setName("Pony")
cmd.setDesc("yay, ponies!")
cmd.setMode("imageurl")
cmd.setHeaderField("imageurl")
self.commands.append(cmd)
cmd.setName("Clop")
cmd.setDesc("NSFW ponies")
self.commands.append(cmd)
2019-12-28 21:57:04 +01:00
2020-03-09 01:05:49 +01:00
cmd.setName("Furry")
cmd.setDesc("Furries")
self.commands.append(cmd)
cmd.setName("Loli")
cmd.setDesc("Cute lolis")
self.commands.append(cmd)
cmd.setName("Yiff")
cmd.setDesc("Yiff")
self.commands.append(cmd)
cmd.setName("Lewd")
cmd.setDesc("Say hi to the police")
self.commands.append(cmd)
cmd.setName("Rasoio")
cmd.setDesc("Dai facciamogli lo scherzo del rasoio!1!!")
cmd.setMode("genericurl")
cmd.setHeaderField("htmldescription")
self.commands.append(cmd)
def callRequest(self, command, senderid, text = ""):
if not command:
return self.errorText
2020-03-09 01:18:21 +01:00
r = requests.get(self.config.getApiUrl(),
2019-12-28 21:57:04 +01:00
headers={
2020-03-09 01:18:21 +01:00
"botid":self.config.getApiId(),
"botpassword":self.config.getApiPassword(),
2020-03-09 01:05:49 +01:00
"command":command.getName().lower(),
2019-12-28 21:57:04 +01:00
"replytouserid":"0",
"senderuserid":senderid,
"receiverchatid":"0",
"querytext":text
}
)
if not r:
return self.errorText
2020-03-09 00:18:09 +01:00
if not "authorized" in r.headers or not "success" in r.headers or not "htmldescription" in r.headers or not "imageurl" in r.headers or not requiredField in r.headers:
2019-12-28 21:57:04 +01:00
return self.errorText
2020-03-09 00:18:09 +01:00
if r.headers["authorized"] != "true" or r.headers["success"] != "true" or r.headers[requiredField] == "":
2019-12-28 21:57:04 +01:00
return self.errorText
2020-03-09 01:05:49 +01:00
return r.headers[command.getHeaderField()]
2019-12-28 21:57:04 +01:00
def start(self):
2020-03-09 01:18:21 +01:00
self.bot = Bot(token=self.config.getBotToken())
2019-12-28 21:57:04 +01:00
self.updater = Updater(bot=self.bot,use_context=True)
2020-03-09 01:05:49 +01:00
print("Inline bot v. {}".format(BOT_VERSION))
2019-12-28 21:57:04 +01:00
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)
2020-03-09 01:05:49 +01:00
2019-12-28 21:57:04 +01:00
print("Started!")
2020-03-09 01:05:49 +01:00
2019-12-28 21:57:04 +01:00
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")
2020-03-09 01:05:49 +01:00
def makeResult(self, command, senderid, querySearch = ""):
if commnand == None:
2020-03-09 00:20:40 +01:00
return InlineQueryResultArticle(
id=uuid.uuid4().hex,
type="article",
2020-03-09 01:05:49 +01:00
title="Error",
input_message_content=InputTextMessageContent("Error", "HTML"),
description=self.errorText
2020-03-09 00:20:40 +01:00
)
2019-12-28 21:57:04 +01:00
2020-03-09 01:05:49 +01:00
qValue = self.callRequest(command, senderid, querySearch)
contentText = ""
if command.getMode() == "imageurl":
2020-03-09 01:40:39 +01:00
contentText = InputTextMessageContent("<a href=\"" + qValue + "\">HonusBot</a>", "HTML")
2020-03-09 01:05:49 +01:00
elif command.getMode() == "genericurl":
2020-03-09 01:40:39 +01:00
contentText = InputTextMessageContent("<a href=\"" + qValue + "\">link</a>", "HTML")
2020-03-09 01:05:49 +01:00
else:
contentText = InputTextMessageContent("Error", "HTML")
2019-12-28 21:57:04 +01:00
return InlineQueryResultArticle(
id=uuid.uuid4().hex,
type="article",
2020-03-09 01:05:49 +01:00
title=command.getName(),
2020-03-09 01:48:14 +01:00
input_message_content=contentText,
2020-03-09 01:05:49 +01:00
description=command.getDesc()
2019-12-28 21:57:04 +01:00
)
def inlineQuery(self, update, context):
senderid = str(update.inline_query.from_user.id)
query = update.inline_query.query
results = list()
if not query:
2020-03-09 01:05:49 +01:00
for command in self.commands:
results.append(self.makeResult(command, senderid)
2019-12-28 21:57:04 +01:00
else:
2020-03-09 01:05:49 +01:00
results.append(self.makeResult(self.cancerCommand, senderid, query))
2019-12-28 21:57:04 +01:00
context.bot.answer_inline_query(update.inline_query.id, results, 1, False)
InlineBot().start()