def rotate(c: Client, msg: Message): targetmsg = msg.reply_to_message if not (targetmsg.photo or targetmsg.sticker): msg.edit_text("Reply to a sticker or photo!") return 1 msg.delete() rotation = ( 180 # If rotation is 90, 180 or 270 there are constants like Image.ROTATE_180 ) if len(msg.command) > 1: try: rotation = int(msg.command[1]) except ValueError: # ValueError: invalid literal for int() with base 10 pass image = get_image(targetmsg) rotated = image.rotate(rotation, PIL.Image.BICUBIC) c.send_photo( msg.chat.id, save_image(rotated), caption="<b>Rotated {} degrees</b>".format(rotation), reply_to_message_id=targetmsg.message_id, )
def resolve_invite(_, message: Message): link = message.command[1].split("/")[-1] d = urlsafe_b64decode(link + "==") message.edit_text( "Invite Link: `{}`\nAdmin: `{}`\nChat: `-100{}`\nHash: `{}`".format( link, *unpack(">iiq", d) ) )
def paste_command(c: Client, msg: Message): msg.edit_text("Pasting...") if msg.reply_to_message.document: path = "tmp/{}".format("".join( random.choices(string.ascii_letters, k=30))) msg.reply_to_message.download(file_name=path) try: text = open(path).read() except UnicodeDecodeError: msg.edit_text( "Please reply to a document or a message with some text") return 1 else: text = msg.reply_to_message.text or msg.reply_to_message.caption if not text: msg.edit_text("Please reply to a document or a message with some text") return 1 key = Nekobin.paste(text) msg.edit_text( f"{emoji.GLOBE_WITH_MERIDIANS} Paste {emoji.GLOBE_WITH_MERIDIANS}\n" f"\n" f"{emoji.LINK} Url: https://nekobin.com/{key}\n" f"{emoji.NEWSPAPER} Raw: https://nekobin.com/raw/{key} \n" f"\n", disable_web_page_preview=True, )
async def rem_user(_, message: Message) -> None: """Remove AI for a user.""" if not message.reply_to_message: message.edit_text("You've gotta reply to someone!") return user_id = message.reply_to_message.from_user.id is_user = db.is_user(user_id) if not is_user: await message.edit_text( "AI isn't enabled for this user in the first place!") else: db.rem_user(user_id) await message.edit_text("AI disabled for this user successfully!") LOGGER.info(f"AI disabled for user - {user_id}")
def upscale(c: Client, msg: Message): if not (msg.reply_to_message.photo or msg.reply_to_message.document): msg.edit_text("Please reply to a photo or document") return 1 if msg.reply_to_message.document: logging.warning("Documents aren't always upscalable.") fname = "tmp/" + "".join(random.choices( string.ascii_letters, k=30)) + ".jpeg" # Photos are sent as jpeg msg.reply_to_message.download(file_name=fname, progress=download_update, progress_args=(msg, )) msg.edit_text("Upscaling...\n" "[{s}????{s}] ??%".format(s=" " * 8)) try: ufname = "tmp/" + "".join(random.choices( string.ascii_letters, k=30)) + ".png" # Photos are recived in .png open(ufname, "wb").write(imu.upscale(fname)) except InternalServerError: msg.edit_text("Document not valid!") return 1 msg.edit_text("Uploading...\n" "[{s}????{s}] ??%".format(s=" " * 8)) c.send_photo(msg.chat.id, ufname, reply_to_message_id=msg.reply_to_message.message_id, caption="<b>Upscaled</b>") msg.delete()
async def add_user(_, message: Message) -> None: """Enable AI for a user.""" if not message.reply_to_message: message.edit_text( "Reply to someone to enable chatbot for that person!") return user_id = message.reply_to_message.from_user.id is_user = db.is_user(user_id) if not is_user: ses = api_client.create_session() ses_id = str(ses.id) expires = str(ses.expires) db.set_ses(user_id, ses_id, expires) await message.edit_text("AI enabled for user successfully!") LOGGER.info(f"AI enabled for user - {user_id}") else: await message.edit_text("AI is already enabled for this user!")
def read_only(client: Client, message: Message): mute_seconds: int = 0 for character in 'mhdw': match = re.search(rf'(\d+|(\d+\.\d+)){character}', message.text) # Searching for a terms if match: # calculating seconds if found valid term if character == 'm': mute_seconds += int( float(match.string[match.start():match.end() - 1]) * 60 // 1) if character == 'h': mute_seconds += int( float(match.string[match.start():match.end() - 1]) * 3600 // 1) if character == 'd': mute_seconds += int( float(match.string[match.start():match.end() - 1]) * 86400 // 1) if character == 'w': mute_seconds += int( float(match.string[match.start():match.end() - 1]) * 604800 // 1) if mute_seconds > 30: try: client.restrict_chat_member(message.chat.id, message.reply_to_message.from_user.id, ChatPermissions(), int(time()) + mute_seconds) from_user = message.reply_to_message.from_user mute_time: Dict[str, int] = { 'days': mute_seconds // 86400, 'hours': mute_seconds % 86400 // 3600, 'minutes': mute_seconds % 86400 % 3600 // 60 } message_text = f"<a href=\"tg://user?id={from_user.id}\">{from_user.first_name}" \ f"{from_user.last_name if from_user.last_name else ''}</a>" \ f" {('(@' + from_user.username + ')') if from_user.username else ''} was muted for" \ f" {((str(mute_time['days']) + ' day') if mute_time['days'] > 0 else '') + ('s' if mute_time['days'] > 1 else '')}" \ f" {((str(mute_time['hours']) + ' hour') if mute_time['hours'] > 0 else '') + ('s' if mute_time['hours'] > 1 else '')}" \ f" {((str(mute_time['minutes']) + ' minute') if mute_time['minutes'] > 0 else '') + ('s' if mute_time['minutes'] > 1 else '')}" while ' ' in message_text: message_text = message_text.replace(' ', ' ') message.edit_text(message_text) except Exception as e: print(e) return
def qr(c: Client, msg: Message): if msg.reply_to_message: text = msg.reply_to_message.text or msg.reply_to_message.caption if not text: msg.edit_text("Not a valid message!") elif len(msg.command) > 1: text = msg.text[len("/qr"):] else: msg.edit_text( "Please reply to a message or specify the text like <code>/qr GodSaveTheDoge</code>" ) return 1 msg.delete() c.send_photo( msg.chat.id, "https://chart.googleapis.com/chart?chs=500x500&cht=qr&chl={}".format( urllib.parse.quote(text)), )
def download(c: Client, msg: Message): starttime = time.time() fname = "Downloads/" + getname(c, msg) try: msg.reply_to_message.download(file_name=fname, progress=download_update, progress_args=(msg, fname)) except Exception as e: msg.edit_text("Something went wrong:\n" + str(e)) msg.edit_text("{} <b>Downloaded</b>\n" "{} <b>Saved to:</b> <code>{}</code>\n" "{} <b>Time needed:</b> {:.1f}\n".format( emoji.DOWN_ARROW, emoji.FILE_FOLDER, fname, emoji.HOURGLASS_DONE, time.time() - starttime))
def invert(c: Client, msg: Message): targetmsg: Message = msg.reply_to_message if not (targetmsg.photo or targetmsg.sticker): msg.edit_text("Please reply to a photo or a sticker!") return 1 msg.delete() image: PIL.Image.Image = get_image(targetmsg) image = PIL.ImageOps.invert(image) c.send_photo( msg.chat.id, save_image(image), caption="<b>Inverted</b>", reply_to_message_id=targetmsg.message_id, )
def msg2sticker(c: Client, msg: Message): targetmsg = msg.reply_to_message if not targetmsg.chat.username: msg.edit_text("Not supported in private chats!") return 1 msg.edit_text("Initializing driver...") try: driver: Firefox = driverWrapper(options=OPTIONS) except Exception as e: logging.error(f"An exception occurred -> {type(e).__name__}: {e}") msg.edit_text("Something went wrong!") return 1 msg.edit_text("Reaching https://telegram.me/...", disable_web_page_preview=True) driver.get( "https://t.me/{}/{}?embed=1".format( targetmsg.chat.username, targetmsg.message_id ) ) element = driver.find_element_by_css_selector(CSS_SELECTOR) if not element: msg.edit_text("Something went wrong!") return 1 image: PIL.Image.Image = PIL.Image.open(io.BytesIO(element.screenshot_as_png)) path = "tmp/" + "".join(random.choices(string.ascii_letters, k=40)) + ".webp" image.save(path, "webp") driver.quit() msg.edit_text("Sending sticker...") c.send_sticker(msg.chat.id, path, reply_to_message_id=targetmsg.message_id) if SEND_PHOTO: path = "tmp/" + "".join(random.choices(string.ascii_letters, k=40)) + ".png" image.save(path, "png") c.send_photo(msg.chat.id, path, reply_to_message_id=targetmsg.message_id) msg.delete()
def telegraph(c: Client, msg: Message): if len(msg.command) > 1: targetmsg = msg text = (targetmsg.text[len("/telegraph"):] or targetmsg.caption[len("/telegraph"):]) author = targetmsg.from_user.first_name title = msg.chat.username or msg.chat.title or msg.chat.first_name elif msg.reply_to_message: targetmsg = msg.reply_to_message text = targetmsg.text author = targetmsg.from_user.first_name title = msg.chat.username or msg.chat.title or msg.chat.first_name else: msg.edit_text( "Please reply to a message or specify the text with <code>/telegraph Some Text Here</code>" ) return 1 if not text: msg.edit_text( f"{emoji.NEWSPAPER} Telegraph\n" f"\n" f"{emoji.CROSS_MARK} <b>Error:</b> <code>Invalid message</code>") nodes = utils.html_to_nodes(text.replace("'", "\\u0027")) if len(nodes) == 0: msg.edit_text( f"{emoji.NEWSPAPER} Telegraph\n" f"\n" f"{emoji.CROSS_MARK} <b>Error:</b> <code>Invalid text!</code>") content = ("[" + "".join([ '{{"tag": "p", "children": [{}]}},'.format( i if isinstance(i, str) else f'"{i}"') for i in nodes[:-1] ]) + '{{"tag": "p", "children": [{}]}}'.format( nodes[-1] if isinstance(nodes[-1], str) != str else f'"{nodes[-1]}"') + "]") files = { "Data": ( "content.html", io.BytesIO(content.replace("'", '"').encode()), "plain/text", ) } data = { "title": title, "author": author, "author_url": "https://github.com/GodSaveTheDoge", "save_hash": "", "page_id": "0", } r = requests.post("https://edit.telegra.ph/save", files=files, data=data, headers=HEADERS).json() if "error" in r.keys(): msg.edit_text( f"{emoji.NEWSPAPER} Telegraph\n" f"\n" f"{emoji.CROSS_MARK} <b>Error:</b> <code>{r['error']}</code>") return 1 msg.edit_text( f"{emoji.NEWSPAPER} Telegraph\n" f"\n" f"{emoji.PAGE_WITH_CURL} <b>Title:</b> <code>{title}</code>\n" f"{emoji.LINK} <b>Link:</b> https://telegra.ph/{r['path']}\n" f"{emoji.PEN} <b>Author:</b> <code>{author}</code>", parse_mode="html", )
def translate_cmd(client: Client, message: Message): def translate_text(text_to_translate: str, dest_lang: str = environ.get('LANGUAGE'), src_lang: str = 'DETECT'): translator = Translator() result: str = '' for i in range(20): try: if src_lang != 'DETECT': result = translator.translate(text_to_translate, src=src_lang, dest=dest_lang).text else: result = translator.translate(text_to_translate, dest=dest_lang).text break except Exception: translator = Translator() return result words: List[str] = message.text.split(' ') if len(words) == 1: text = translate_text(message.reply_to_message.text) message.edit_text(text if text != '' else "1Couldn't translate...") return if ':' in words[1]: try: langs: List[str] = words[1].split(':') src: str = languages.lookup(langs[0]).name dest: str = languages.lookup(langs[1]).name text = ' '.join( words[2:]) if len(words) > 2 else message.reply_to_message.text text = translate_text(text, dest, src) message.edit_text(text if text != '' else "2Couldn't translate...") except LookupError: message.edit_text("Couldn't find language...") except Exception: message.edit_text("3Couldn't translate...") return try: text = ' '.join( words[2:]) if len(words) > 2 else message.reply_to_message.text text = translate_text(text, languages.lookup(words[1]).name) message.edit_text(text if text != '' else "4Couldn't translate...") except LookupError: text = translate_text(message.text) message.edit_text(text if text != '' else "5Couldn't translate...")
def carbon(c: Client, msg: Message): code = ArgumentOrReply(msg, len("/carbon ")) if not code: msg.edit_text("Please reply to a message or use <code>/carbon My Text</code>") _params = { "bg": "rgba(57, 70, 79, 1)", "t": "seti", "wt": "none", "l": "auto", "ds": "true", "dsyoff": "20px", "dsblur": "68px", "wc": "true", "wa": "true", "pv": "56px", "ph": "56px", "ln": "false", "fl": "1", "fm": "Hack", "fs": "14px", "lh": "133%", "si": "false", "es": "2x", "wm": "false", "code": code, } params = "&".join( ["{}={}".format(i, urllib.parse.quote(j)) for i, j in _params.items()] ) msg.edit_text("Initializing driver...") try: driver: Firefox = driverWrapper(options=OPTIONS) except Exception as e: logging.error(f"An exception occurred -> {type(e).__name__}: {e}") msg.edit_text("Something went wrong!") return 1 msg.edit_text("Reaching https://carbon.now.sh/...", disable_web_page_preview=True) driver.get("https://carbon.now.sh/?" + params) element = driver.find_element_by_css_selector(CSS_SELECTOR) if not element: msg.edit_text("Something went wrong!") return 1 if not os.path.exists("tmp"): os.mkdir("tmp") path = "tmp/" + "".join(random.choices(string.ascii_letters, k=40)) + ".png" open(path, "wb").write(element.screenshot_as_png) driver.quit() msg.edit_text("Sending photo...") if msg.reply_to_message: c.send_photo( msg.chat.id, path, reply_to_message_id=msg.reply_to_message.message_id ) else: c.send_photo(msg.chat.id, path) msg.delete()
def editMessage(text: str, message: Message): try: message.edit_text(text) except Exception as e: LOGGER.error(str(e))