From 90b2aec008343d2b91546ce50a56e38d93247aca Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 15:23:59 +0530 Subject: [PATCH 01/23] Create kang.py --- Zect/modules/kang.py | 227 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 Zect/modules/kang.py diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py new file mode 100644 index 0000000..c47a9b7 --- /dev/null +++ b/Zect/modules/kang.py @@ -0,0 +1,227 @@ +import io +import os +import random +import time + +from PIL import Image +from pyrogram import emoji, filters +from pyrogram.raw.functions.messages import GetStickerSet +from pyrogram.raw.types import InputStickerSetShortName +from pyrogram.errors import YouBlockedUser, StickersetInvalid +from Zect.helpers.pyrohelper import get_args +from Zect import app +from config import PREFIX + + +@app.on_message(filters.command("kang", PREFIX) & filters.me) +async def kang(client, message): + user = await app.get_me() + replied = message.reply_to_message + photo = None + emoji_ = None + is_anim = False + resize = False + if replied and replied.media: + if replied.photo: + resize = True + elif replied.document and "image" in replied.document.mime_type: + resize = True + elif replied.document and "tgsticker" in replied.document.mime_type: + is_anim = True + elif replied.sticker: + if not replied.sticker.file_name: + await message.edit("`Sticker has no Name!`") + return + emoji_ = replied.sticker.emoji + is_anim = replied.sticker.is_animated + if not replied.sticker.file_name.endswith(".tgs"): + resize = True + else: + await message.edit("`Unsupported File!`") + return + await message.edit(f"`{random.choice(KANGING_STR)}`") + photo = await app.download_media(message=replied) + else: + await message.edit("`I can't kang that...`") + return + if photo: + args = get_args(message) + pack = 1 + if len(args) == 2: + emoji_, pack = args + elif len(args) == 1: + if args[0].isnumeric(): + pack = int(args[0]) + else: + emoji_ = args[0] + + if emoji_ and emoji_ not in ( + getattr(emoji, a) for a in dir(emoji) if not a.startswith("_") + ): + emoji_ = None + if not emoji_: + emoji_ = "🤔" + + u_name = user.username + if u_name: + u_name = "@" + u_name + else: + u_name = user.first_name or user.id + packname = f"a{user.id}_by_zect_{pack}" + custom_packnick = f"{u_name}'s kang pack" + packnick = f"{custom_packnick} Vol.{pack}" + cmd = "/newpack" + if resize: + photo = resize_photo(photo) + if is_anim: + packname += "_anim" + packnick += " (Animated)" + cmd = "/newanimated" + exist = False + try: + exist = await app.send( + GetStickerSet(stickerset=InputStickerSetShortName(short_name=packname)) + ) + except StickersetInvalid: + pass + if exist is not False: + try: + await app.ask("Stickers", "/addsticker") + except YouBlockedUser: + await message.edit("first **unblock** @Stickers") + return + msg = await app.ask("Stickers", packname) + limit = "50" if is_anim else "120" + while limit in msg.text: + pack += 1 + packname = f"a{user.id}_by_zect_{pack}" + packnick = f"{custom_packnick} Vol.{pack}" + if is_anim: + packname += "_anim" + packnick += " (Animated)" + await message.edit( + "`Switching to Pack " + str(pack) + " due to insufficient space`" + ) + msg = await app.ask("Stickers", packname) + if msg.text == "Invalid pack selected": + await app.ask("Stickers", cmd) + await app.ask("Stickers", packnick) + await app.send_document("Stickers", photo) + time.sleep(0.2) + await app.ask("Stickers", emoji_) + await app.send_message("Stickers", "/publish") + if is_anim: + time.sleep(0.2) + await app.send_message( + "Stickers", f"<{packnick}>", parse_mode=None + ) + time.sleep(0.2) + await app.ask("Stickers", "/skip") + time.sleep(0.2) + await app.send_message("Stickers", packname) + out = f"[kanged](t.me/addstickers/{packname})" + await message.edit( + f"**Sticker** {out} __in a Different Pack__**!**" + ) + return + await app.send_document("Stickers", photo) + time.sleep(0.2) + rsp = await app.listen("Stickets") + if "Sorry, the file type is invalid." in rsp.text: + await message.edit( + "`Failed to add sticker, use` @Stickers " + "`bot to add the sticker manually.`" + ) + return + await app.ask("Stickers", emoji_) + await app.send_message("Stickers", "/done") + else: + await message.edit("`Brewing a new Pack...`") + try: + await app.ask("Stickers", cmd) + except YouBlockedUser: + await message.edit("first **unblock** @Stickers") + return + await app.ask("Stickers", packnick) + await app.send_document("Stickers", photo) + time.sleep(0.2) + rsp = await app.listen("Stickets") + if "Sorry, the file type is invalid." in rsp.text: + await message.edit( + "`Failed to add sticker, use` @Stickers " + "`bot to add the sticker manually.`" + ) + return + await app.ask("Stickers", emoji_) + await app.send_message("Stickers", "/publish") + if is_anim: + time.sleep(0.2) + await app.send_message("Stickers", f"<{packnick}>", parse_mode=None) + time.sleep(0.2) + await app.ask("Stickers", "/skip") + await app.send_message("Stickers", packname) + out = f"[kanged](t.me/addstickers/{packname})" + await message.edit(f"**Sticker** {out}**!**") + await app.read_history("Stickers") + if os.path.exists(str(photo)): + os.remove(photo) + + +@app.on_message(filters.command("stkrinfo", PREFIX) & filters.me) +async def sticker_pack_info_(client, message): + replied = message.reply_to_message + if not replied: + await message.edit("`I can't fetch info from nothing, can I ?!`") + return + if not replied.sticker: + await message.edit("`Reply to a sticker to get the pack details`") + return + await message.edit("`Fetching details of the sticker pack, please wait..`") + get_stickerset = await app.send( + GetStickerSet( + stickerset=InputStickerSetShortName(short_name=replied.sticker.set_name) + ) + ) + pack_emojis = [] + for document_sticker in get_stickerset.packs: + if document_sticker.emoticon not in pack_emojis: + pack_emojis.append(document_sticker.emoticon) + out_str = ( + f"**Sticker Title:** `{get_stickerset.set.title}\n`" + f"**Sticker Short Name:** `{get_stickerset.set.short_name}`\n" + f"**Archived:** `{get_stickerset.set.archived}`\n" + f"**Official:** `{get_stickerset.set.official}`\n" + f"**Masks:** `{get_stickerset.set.masks}`\n" + f"**Animated:** `{get_stickerset.set.animated}`\n" + f"**Stickers In Pack:** `{get_stickerset.set.count}`\n" + f"**Emojis In Pack:**\n{' '.join(pack_emojis)}" + ) + await message.edit(out_str) + + +def resize_photo(photo: str) -> io.BytesIO: + """ Resize the given photo to 512x512 """ + image = Image.open(photo) + maxsize = 512 + scale = maxsize / max(image.width, image.height) + new_size = (int(image.width * scale), int(image.height * scale)) + image = image.resize(new_size, Image.LANCZOS) + resized_photo = io.BytesIO() + resized_photo.name = "sticker.png" + image.save(resized_photo, "PNG") + os.remove(photo) + return resized_photo + + +KANGING_STR = ( + "Using Witchery to kang this sticker...", + "Plagiarising hehe...", + "Inviting this sticker over to my pack...", + "Kanging this sticker...", + "Hey that's a nice sticker!\nMind if I kang?!..", + "hehe me stel ur stikér\nhehe.", + "Ay look over there (☉。☉)!→\nWhile I kang this...", + "Roses are red violets are blue, kanging this sticker so my pacc looks cool", + "Imprisoning this sticker...", + "Mr.Steal Your Sticker is stealing this sticker... ", +) From 22416e473898033da20b2ce9004799f9bf4ac1f8 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 15:49:36 +0530 Subject: [PATCH 02/23] Update afkdb.py --- Zect/database/afkdb.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Zect/database/afkdb.py b/Zect/database/afkdb.py index abb27e8..4ec8cd7 100644 --- a/Zect/database/afkdb.py +++ b/Zect/database/afkdb.py @@ -27,8 +27,11 @@ async def set_unafk(): async def get_afk_status(): result = await collection.find_one({"_id": 1}) - status = result["afk_status"] - return status + if not result: + return False + else: + status = result["afk_status"] + return status async def afk_stuff(): From 16258b508848f7c37e742867de8cad3fa53da34d Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 15:51:03 +0530 Subject: [PATCH 03/23] Update pmpermitdb.py --- Zect/database/pmpermitdb.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Zect/database/pmpermitdb.py b/Zect/database/pmpermitdb.py index 3bce801..11d1831 100644 --- a/Zect/database/pmpermitdb.py +++ b/Zect/database/pmpermitdb.py @@ -41,6 +41,8 @@ async def set_limit(limit): async def get_pm_settings(): result = await collection.find_one({"_id": 1}) + if not result: + return pmpermit = result["pmpermit"] pm_message = result.get("pmpermit_message", PMPERMIT_MESSAGE) block_message = result.get("block_message", BLOCKED) From 773481074171971d15a89a434166dbb86b02bcbe Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 15:53:30 +0530 Subject: [PATCH 04/23] Update kang.py --- Zect/modules/kang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py index c47a9b7..5aa6052 100644 --- a/Zect/modules/kang.py +++ b/Zect/modules/kang.py @@ -142,7 +142,8 @@ async def kang(client, message): except YouBlockedUser: await message.edit("first **unblock** @Stickers") return - await app.ask("Stickers", packnick) + await app.send_message("Stickers", packnick) + time.sleep(0.2) await app.send_document("Stickers", photo) time.sleep(0.2) rsp = await app.listen("Stickets") From a96e0ff50ebd35fa82679a81dd6d6fce7dc42559 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:03:14 +0530 Subject: [PATCH 05/23] Update kang.py --- Zect/modules/kang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py index 5aa6052..d61dd47 100644 --- a/Zect/modules/kang.py +++ b/Zect/modules/kang.py @@ -138,7 +138,8 @@ async def kang(client, message): else: await message.edit("`Brewing a new Pack...`") try: - await app.ask("Stickers", cmd) + await app.send_message("Stickers", cmd) + time.sleep(0.2) except YouBlockedUser: await message.edit("first **unblock** @Stickers") return From 162f584fd15b34d2940bf355d72a44e8a3651ffc Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:08:59 +0530 Subject: [PATCH 06/23] Update kang.py --- Zect/modules/kang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py index d61dd47..90c009c 100644 --- a/Zect/modules/kang.py +++ b/Zect/modules/kang.py @@ -154,7 +154,8 @@ async def kang(client, message): "`bot to add the sticker manually.`" ) return - await app.ask("Stickers", emoji_) + await app.send_message("Stickers", emoji_) + time.sleep(0.2) await app.send_message("Stickers", "/publish") if is_anim: time.sleep(0.2) From 8508906bfb0aca2b5adfdda442904f4ed2d59f09 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:10:05 +0530 Subject: [PATCH 07/23] Update kang.py --- Zect/modules/kang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py index 90c009c..e7a9ff0 100644 --- a/Zect/modules/kang.py +++ b/Zect/modules/kang.py @@ -161,7 +161,8 @@ async def kang(client, message): time.sleep(0.2) await app.send_message("Stickers", f"<{packnick}>", parse_mode=None) time.sleep(0.2) - await app.ask("Stickers", "/skip") + await app.send_message("Stickers", "/skip") + time.sleep(0.2) await app.send_message("Stickers", packname) out = f"[kanged](t.me/addstickers/{packname})" await message.edit(f"**Sticker** {out}**!**") From 0b2e4642d01852fcce1caa700e1168824510fad4 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 16:21:59 +0530 Subject: [PATCH 08/23] Update kang.py --- Zect/modules/kang.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py index e7a9ff0..1769a28 100644 --- a/Zect/modules/kang.py +++ b/Zect/modules/kang.py @@ -104,11 +104,14 @@ async def kang(client, message): ) msg = await app.ask("Stickers", packname) if msg.text == "Invalid pack selected": - await app.ask("Stickers", cmd) - await app.ask("Stickers", packnick) + await app.send_message("Stickers", cmd) + time.sleep(0.2) + await app.send_message("Stickers", packnick) + time.sleep(0.2) await app.send_document("Stickers", photo) time.sleep(0.2) - await app.ask("Stickers", emoji_) + await app.send_message("Stickers", emoji_) + time.sleep(0.2) await app.send_message("Stickers", "/publish") if is_anim: time.sleep(0.2) @@ -116,7 +119,7 @@ async def kang(client, message): "Stickers", f"<{packnick}>", parse_mode=None ) time.sleep(0.2) - await app.ask("Stickers", "/skip") + await app.send_message("Stickers", "/skip") time.sleep(0.2) await app.send_message("Stickers", packname) out = f"[kanged](t.me/addstickers/{packname})" @@ -147,13 +150,6 @@ async def kang(client, message): time.sleep(0.2) await app.send_document("Stickers", photo) time.sleep(0.2) - rsp = await app.listen("Stickets") - if "Sorry, the file type is invalid." in rsp.text: - await message.edit( - "`Failed to add sticker, use` @Stickers " - "`bot to add the sticker manually.`" - ) - return await app.send_message("Stickers", emoji_) time.sleep(0.2) await app.send_message("Stickers", "/publish") From 38cb501ca6bb208e851f760346ee595372f5668e Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:40:57 +0530 Subject: [PATCH 09/23] Update admin.py --- Zect/modules/admin.py | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/Zect/modules/admin.py b/Zect/modules/admin.py index 66f96ba..b172d34 100644 --- a/Zect/modules/admin.py +++ b/Zect/modules/admin.py @@ -221,3 +221,64 @@ async def pin_message(_, message: Message): # RIP. await asyncio.sleep(3) await message.delete() + + @app.on_message(filters.command("promote", PREFIX) & filters.me) +async def promote(client, message: Message): + if await CheckAdmin(message) is False: + await message.edit("**I am not admin.**") + return + title = None + reply = message.reply_to_message + if reply: + user = reply.from_user["id"] + title = get_arg(message) + else: + args = get_args(message) + if len(args) != 1 and len(args) != 2: + await message.edit("**Whome should I promote**") + return + user = args[0] + if len(args) > 1: + title = " ".join(args[1:]) + try: + await app.promote_chat_member(message.chat.id, user, can_pin_messages=True) + await message.edit("**Promoted**") + except Exception as e: + await message.edit(f"{e}") + if title: + try: + await app.set_administrator_title(message.chat.id, user) + except: + pass + + +@app.on_message(filters.command("demote", PREFIX) & filters.me) +async def demote(client, message: Message): + if await CheckAdmin(message) is False: + await message.edit("**I am not admin.**") + return + reply = message.reply_to_message + if reply: + user = reply.from_user["id"] + else: + user = get_arg(message) + if not user: + await message.edit("**Whome should I demote?**") + return + try: + await app.promote_chat_member( + message.chat.id, + user, + is_anonymous=False, + can_change_info=False, + can_delete_messages=False, + can_edit_messages=False, + can_invite_users=False, + can_promote_members=False, + can_restrict_members=False, + can_pin_messages=False, + can_post_messages=False, + ) + await message.edit("**Demoted**") + except Exception as e: + await message.edit(f"{e}") From 3bef144249d56e595b415c614e24bf310cd4f110 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:44:21 +0530 Subject: [PATCH 10/23] Update admin.py --- Zect/modules/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/admin.py b/Zect/modules/admin.py index b172d34..7f1b0fa 100644 --- a/Zect/modules/admin.py +++ b/Zect/modules/admin.py @@ -222,7 +222,7 @@ async def pin_message(_, message: Message): await asyncio.sleep(3) await message.delete() - @app.on_message(filters.command("promote", PREFIX) & filters.me) +@app.on_message(filters.command("promote", PREFIX) & filters.me) async def promote(client, message: Message): if await CheckAdmin(message) is False: await message.edit("**I am not admin.**") From 17cfe3dc2ff891b83ed79d2404bb6a670a7e41f0 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Tue, 23 Feb 2021 20:48:51 +0530 Subject: [PATCH 11/23] Update admin.py --- Zect/modules/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/admin.py b/Zect/modules/admin.py index 7f1b0fa..867d912 100644 --- a/Zect/modules/admin.py +++ b/Zect/modules/admin.py @@ -7,7 +7,7 @@ from pyrogram.methods.chats.get_chat_members import Filters as ChatMemberFilters from Zect import app, CMD_HELP -from Zect.helpers.pyrohelper import get_arg +from Zect.helpers.pyrohelper import get_arg, get_args from Zect.helpers.adminhelpers import CheckAdmin from config import PREFIX From 2ee73b584b8cdaef2de5ef82ffae16b6ebd801ca Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:04:25 +0530 Subject: [PATCH 12/23] Update kang.py --- Zect/modules/kang.py | 46 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/Zect/modules/kang.py b/Zect/modules/kang.py index 1769a28..3194903 100644 --- a/Zect/modules/kang.py +++ b/Zect/modules/kang.py @@ -13,6 +13,9 @@ from config import PREFIX +convo = "" + + @app.on_message(filters.command("kang", PREFIX) & filters.me) async def kang(client, message): user = await app.get_me() @@ -86,13 +89,13 @@ async def kang(client, message): pass if exist is not False: try: - await app.ask("Stickers", "/addsticker") + await app.send_message("Stickers", "/addsticker") except YouBlockedUser: await message.edit("first **unblock** @Stickers") return - msg = await app.ask("Stickers", packname) + await app.send_message("Stickers", packname) limit = "50" if is_anim else "120" - while limit in msg.text: + while limit in await get_response(message): pack += 1 packname = f"a{user.id}_by_zect_{pack}" packnick = f"{custom_packnick} Vol.{pack}" @@ -102,16 +105,16 @@ async def kang(client, message): await message.edit( "`Switching to Pack " + str(pack) + " due to insufficient space`" ) - msg = await app.ask("Stickers", packname) - if msg.text == "Invalid pack selected": + await app.send_message("Stickers", packname) + if await get_response(message) == "Invalid pack selected": await app.send_message("Stickers", cmd) - time.sleep(0.2) + await get_response(message) await app.send_message("Stickers", packnick) - time.sleep(0.2) + await get_response(message) await app.send_document("Stickers", photo) - time.sleep(0.2) + await get_response(message) await app.send_message("Stickers", emoji_) - time.sleep(0.2) + await get_response(message) await app.send_message("Stickers", "/publish") if is_anim: time.sleep(0.2) @@ -129,36 +132,43 @@ async def kang(client, message): return await app.send_document("Stickers", photo) time.sleep(0.2) - rsp = await app.listen("Stickets") - if "Sorry, the file type is invalid." in rsp.text: + rsp = await get_response(message) + if "Sorry, the file type is invalid." in rsp: await message.edit( "`Failed to add sticker, use` @Stickers " "`bot to add the sticker manually.`" ) return - await app.ask("Stickers", emoji_) + await app.send_message("Stickers", emoji_) + await get_response(message) await app.send_message("Stickers", "/done") else: await message.edit("`Brewing a new Pack...`") try: await app.send_message("Stickers", cmd) - time.sleep(0.2) except YouBlockedUser: await message.edit("first **unblock** @Stickers") return await app.send_message("Stickers", packnick) - time.sleep(0.2) + await get_response(message) await app.send_document("Stickers", photo) time.sleep(0.2) + rsp = await get_response(message) + if "Sorry, the file type is invalid." in rsp: + await message.edit( + "`Failed to add sticker, use` @Stickers " + "`bot to add the sticker manually.`" + ) + return await app.send_message("Stickers", emoji_) - time.sleep(0.2) + await get_response(message) await app.send_message("Stickers", "/publish") if is_anim: time.sleep(0.2) await app.send_message("Stickers", f"<{packnick}>", parse_mode=None) time.sleep(0.2) await app.send_message("Stickers", "/skip") - time.sleep(0.2) + await get_response(message) await app.send_message("Stickers", packname) out = f"[kanged](t.me/addstickers/{packname})" await message.edit(f"**Sticker** {out}**!**") @@ -213,6 +223,10 @@ def resize_photo(photo: str) -> io.BytesIO: return resized_photo +async def get_response(message): + return [x async for x in app.iter_history("Stickers", limit=1)][0].text + + KANGING_STR = ( "Using Witchery to kang this sticker...", "Plagiarising hehe...", From 2ce283083401951656d9b4e46e8fb3affe87f00c Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:18:36 +0530 Subject: [PATCH 13/23] Create updater.py --- Zect/modules/updater.py | 156 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 Zect/modules/updater.py diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py new file mode 100644 index 0000000..42dc0ff --- /dev/null +++ b/Zect/modules/updater.py @@ -0,0 +1,156 @@ +import asyncio +import sys +from os import environ, execle, path, remove +from config import HEROKU_API, HEROKU_APP_NAME + +from git import Repo +from git.exc import GitCommandError, InvalidGitRepositoryError, NoSuchPathError + +from pyrogram import filters +from Zect import app +from Zect.helpers.pyrohelpers import get_arg + +UPSTREAM_REPO_URL = "https://github.com/okay-retard/ZectUserBot" +requirements_path = path.join( + path.dirname(path.dirname(path.dirname(__file__))), "requirements.txt" +) + + +async def gen_chlog(repo, diff): + ch_log = "" + d_form = "On %d/%m/%y at %H:%M:%S" + for c in repo.iter_commits(diff): + ch_log += f"**#{c.count()}** : {c.committed_datetime.strftime(d_form)} : [{c.summary}]({UPSTREAM_REPO_URL.rstrip('/')}/commit/{c}) by `{c.author}`\n" + return ch_log + + +async def updateme_requirements(): + reqs = str(requirements_path) + try: + process = await asyncio.create_subprocess_shell( + " ".join([sys.executable, "-m", "pip", "install", "-r", reqs]), + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) + await process.communicate() + return process.returncode + except Exception as e: + return repr(e) + + +@app.on_message(filters.command("update", PREFIX) & filters.me) +async def upstream(client, message): + status = await message.edit("`Checking for updates, please wait....`") + conf = get_arg(message) + off_repo = UPSTREAM_REPO_URL + try: + txt = "`Oops.. Updater cannot continue due to " + txt += "some problems occured`\n\n**LOGTRACE:**\n" + repo = Repo() + except NoSuchPathError as error: + await status.edit(f"{txt}\n`directory {error} is not found`") + repo.__del__() + return + except GitCommandError as error: + await status.edit(f"{txt}\n`Early failure! {error}`", time=10) + repo.__del__() + return + except InvalidGitRepositoryError as error: + if conf != "now": + await status.edit(f"**Unfortunately, the directory {error} does not seem to be a git repository.Or Maybe it just needs a sync verification with {GIT_REPO_NAME} But we can fix that by force updating the userbot using** `.update now.`") + return + repo = Repo.init() + origin = repo.create_remote("upstream", off_repo) + origin.fetch() + repo.create_head("main", origin.refs.main) + repo.heads.main.set_tracking_branch(origin.refs.main) + repo.heads.main.checkout(True) + ac_br = repo.active_branch.name + if ac_br != "master": + await status.edit(f"**[UPDATER]:**` You are on ({ac_br})\n Please change to master branch.`") + repo.__del__() + return + try: + repo.create_remote("upstream", off_repo) + except BaseException: + pass + ups_rem = repo.remote("upstream") + ups_rem.fetch(ac_br) + changelog = await gen_chlog(repo, f"HEAD..upstream/{ac_br}") + if "now" not in conf: + if changelog: + changelog_str = f"**New UPDATE available for [[{ac_br}]]({UPSTREAM_REPO_URL}/tree/{ac_br}):\n\nCHANGELOG**\n\n{changelog}" + if len(changelog_str) > 4096: + await status.edit("`Changelog is too big, view the file to see it.`") + file = open("output.txt", "w+") + file.write(changelog_str) + file.close() + await app.send_document( + message.chat.id, + "output.txt", + caption="Do `.update now` to update.", + reply_to_message_id=status.message_id + ) + remove("output.txt") + else: + return await status.edit("{changelog_str}\n\nDo `.update now` to update." + ) + else: + await status.edit(f"\n`Your BOT is` **up-to-date** `with` **[[{ac_br}]]({UPSTREAM_REPO_URL}/tree/{ac_br})**\n" + ) + repo.__del__() + return + if HEROKU_API is not None: + import heroku3 + + heroku = heroku3.from_key(HEROKU_API) + heroku_app = None + heroku_applications = heroku.apps() + if not HEROKU_APP_NAME: + await status.edit( + "`Please set up the HEROKU_APP_NAME variable to be able to update userbot.`" + ) + repo.__del__() + return + for app in heroku_applications: + if app.name == HEROKU_APP_NAME: + heroku_app = app + break + if heroku_app is None: + await status.edit( + f"{txt}\n`Invalid Heroku credentials for updating userbot dyno.`" + ) + repo.__del__() + return + await status.edit("`Userbot dyno build in progress, please wait for it to complete.`") + ups_rem.fetch(ac_br) + repo.git.reset("--hard", "FETCH_HEAD") + heroku_git_url = heroku_app.git_url.replace( + "https://", "https://api:" + HEROKU_API + "@" + ) + if "heroku" in repo.remotes: + remote = repo.remote("heroku") + remote.set_url(heroku_git_url) + else: + remote = repo.create_remote("heroku", heroku_git_url) + try: + remote.push(refspec=f"HEAD:refs/heads/{ac_br}", force=True) + except GitCommandError as error: + await status.edit(f"{txt}\n`Here is the error log:\n{error}`") + repo.__del__() + return + await status.edit("`Successfully Updated!\nRestarting, please wait...`") + else: + # Classic Updater, pretty straightforward. + try: + ups_rem.pull(ac_br) + except GitCommandError: + repo.git.reset("--hard", "FETCH_HEAD") + await updateme_requirements() + await status.edit( + "`Successfully Updated!\nBot is restarting... Wait for a second!`", + ) + # Spin a new instance of bot + args = [sys.executable, "./resources/startup/deploy.sh"] + execle(sys.executable, *args, environ) + return From e42d7d1ab4831690d7dc32de025393f010267c2b Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:20:09 +0530 Subject: [PATCH 14/23] Update config.py --- config.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config.py b/config.py index 1a0dfc3..c4d9223 100644 --- a/config.py +++ b/config.py @@ -4,5 +4,7 @@ API_ID = int(os.getenv("API_ID")) MONGO_URI = os.getenv("MONGO_URI") SESSION = os.getenv("SESSION") +HEROKU_API = os.getenv("HEROKU_API") +HEROKU_APP_NAME = os.getenv("HEROKU_APP_NAME") PREFIX = os.getenv("PREFIX") -LOG_CHAT = int(os.getenv("LOG_CHAT")) \ No newline at end of file +LOG_CHAT = int(os.getenv("LOG_CHAT")) From 42c52e1308e499b5746be67ca1700e6b66dde69c Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:21:58 +0530 Subject: [PATCH 15/23] Update app.json --- app.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app.json b/app.json index 24d6c2b..50060bf 100644 --- a/app.json +++ b/app.json @@ -18,6 +18,14 @@ "description": "This is for the database account, you can obtain it from mongodb.com.", "required": true }, + "HEROKU_API": { + "description": "Your heroku api key if using heroku.", + "required": false + }, + "HEROKU_APP_NAME": { + "description": "Your heroku app name if using heroku.", + "required": false + }, "PREFIX": { "description": "Command handler.", "required": true, From d452e680f9e7dd8553b0053f6cca3bd2d48426bc Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:27:48 +0530 Subject: [PATCH 16/23] Update requirements.txt --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 9b617c0..25f8d5e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,5 @@ dnspython requests asyncio pillow +GitPython +heroku3 From 723e25b1573c4679c1ef2814988418b0e09b2c3d Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:29:55 +0530 Subject: [PATCH 17/23] Update updater.py --- Zect/modules/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py index 42dc0ff..c8d446a 100644 --- a/Zect/modules/updater.py +++ b/Zect/modules/updater.py @@ -8,7 +8,7 @@ from pyrogram import filters from Zect import app -from Zect.helpers.pyrohelpers import get_arg +from Zect.helpers.pyrohelper import get_arg UPSTREAM_REPO_URL = "https://github.com/okay-retard/ZectUserBot" requirements_path = path.join( From 3e51a5ffe559c394e12b15982ff4599300397669 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:31:48 +0530 Subject: [PATCH 18/23] Update updater.py --- Zect/modules/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py index c8d446a..8360a97 100644 --- a/Zect/modules/updater.py +++ b/Zect/modules/updater.py @@ -1,7 +1,7 @@ import asyncio import sys from os import environ, execle, path, remove -from config import HEROKU_API, HEROKU_APP_NAME +from config import HEROKU_API, HEROKU_APP_NAME, PREFIX from git import Repo from git.exc import GitCommandError, InvalidGitRepositoryError, NoSuchPathError From 0ccad4dbb3b7da0964f2a250b3e2bfcb4f0e155f Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:36:12 +0530 Subject: [PATCH 19/23] Update updater.py --- Zect/modules/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py index 8360a97..6f6d2a1 100644 --- a/Zect/modules/updater.py +++ b/Zect/modules/updater.py @@ -57,7 +57,7 @@ async def upstream(client, message): return except InvalidGitRepositoryError as error: if conf != "now": - await status.edit(f"**Unfortunately, the directory {error} does not seem to be a git repository.Or Maybe it just needs a sync verification with {GIT_REPO_NAME} But we can fix that by force updating the userbot using** `.update now.`") + await status.edit(f"**Unfortunately, the directory {error} does not seem to be a git repository.Or Maybe it just needs a sync verification. But we can fix that by force updating the userbot using** `.update now.`") return repo = Repo.init() origin = repo.create_remote("upstream", off_repo) From dc569fc552eabeb399a021913935ebcbfd2a5a85 Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:37:39 +0530 Subject: [PATCH 20/23] Update updater.py --- Zect/modules/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py index 6f6d2a1..f4f4be7 100644 --- a/Zect/modules/updater.py +++ b/Zect/modules/updater.py @@ -62,7 +62,7 @@ async def upstream(client, message): repo = Repo.init() origin = repo.create_remote("upstream", off_repo) origin.fetch() - repo.create_head("main", origin.refs.main) + repo.create_head("master", origin.refs.main) repo.heads.main.set_tracking_branch(origin.refs.main) repo.heads.main.checkout(True) ac_br = repo.active_branch.name From 280558df974b83e9b9e1fa780295eccd4af84b3e Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:43:07 +0530 Subject: [PATCH 21/23] Update updater.py --- Zect/modules/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py index f4f4be7..da09cd6 100644 --- a/Zect/modules/updater.py +++ b/Zect/modules/updater.py @@ -62,7 +62,7 @@ async def upstream(client, message): repo = Repo.init() origin = repo.create_remote("upstream", off_repo) origin.fetch() - repo.create_head("master", origin.refs.main) + repo.create_head("master", origin.refs.master) repo.heads.main.set_tracking_branch(origin.refs.main) repo.heads.main.checkout(True) ac_br = repo.active_branch.name From 7b5a8040c430d964eeb19c9ece3650551e36053f Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:45:39 +0530 Subject: [PATCH 22/23] Update updater.py --- Zect/modules/updater.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zect/modules/updater.py b/Zect/modules/updater.py index da09cd6..f82d56f 100644 --- a/Zect/modules/updater.py +++ b/Zect/modules/updater.py @@ -63,8 +63,8 @@ async def upstream(client, message): origin = repo.create_remote("upstream", off_repo) origin.fetch() repo.create_head("master", origin.refs.master) - repo.heads.main.set_tracking_branch(origin.refs.main) - repo.heads.main.checkout(True) + repo.heads.master.set_tracking_branch(origin.refs.master) + repo.heads.master.checkout(True) ac_br = repo.active_branch.name if ac_br != "master": await status.edit(f"**[UPDATER]:**` You are on ({ac_br})\n Please change to master branch.`") From c23a3930675a932b7fd490c28848667480f977bf Mon Sep 17 00:00:00 2001 From: okay-retard <68938378+okay-retard@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:50:48 +0530 Subject: [PATCH 23/23] Update admin.py --- Zect/modules/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zect/modules/admin.py b/Zect/modules/admin.py index 867d912..72dd578 100644 --- a/Zect/modules/admin.py +++ b/Zect/modules/admin.py @@ -49,7 +49,7 @@ async def ban_hammer(_, message: Message): ) await message.edit(f"{get_user.first_name} has been banned.") except: - await message.edit("I can't ban this user.") + await message.edit("**I can't ban this user.**") @app.on_message(filters.command("unban", PREFIX) & filters.me)