Example #1
0
async def unsub(event):
    args = event.pattern_match.group(1)
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "Only federation creators can unsubscribe from a fed. But you don't have a federation!"
        )
    for f in fedowner:
        fed_id = f["fed_id"]
        name = f["fed"]["fname"]
    if not args:
        return await event.reply(
            "You need to specify which federation you're asking about by giving me a FedID!"
        )
    if len(args) < 8:
        return await event.reply("This isn't a valid FedID format!")
    getfed = sql.search_fed_by_id(args)
    if not getfed:
        return await event.reply(
            "This FedID does not refer to an existing federation.")
    sname = getfed["fname"]
    remsub = sql.rem_sub(fed_id, args)
    unsubfed = sql.unsubs_fed(args, fed_id)
    await event.reply(
        f"Federation {name} is no longer subscribed to {sname}. Bans in {sname} will no longer be applied.\nPlease note that any bans that happened because the user was banned from the subfed will need to be removed manually."
    )
Example #2
0
async def new(event):
    if not event.is_private:
        return await event.reply(
            "Create your federation in my PM - not in a group.")
    name = event.pattern_match.group(1)
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if fedowner:
        for f in fedowner:
            text = "{}".format(f["fed"]["fname"])
        return await event.reply(
            f"You already have a federation called `{text}` ; you can't create another. If you would like to rename it, use /renamefed."
        )
    if not name:
        return await event.reply(
            "You need to give your federation a name! Federation names can be up to 64 characters long."
        )
    if len(name) > 64:
        return await event.reply(
            "Federation names can only be upto 64 charactors long.")
    fed_id = str(uuid.uuid4())
    fed_name = name
    x = sql.new_fed(event.sender_id, fed_name, fed_id)
    return await event.reply(
        f"Created new federation with FedID: `{fed_id}`.\nUse this ID to join the federation! eg:\n`/joinfed {fed_id}`"
    )
Example #3
0
async def log(event):
    chat = event.chat_id
    if not is_admin(event, event.sender_id):
        return await event.reply("You need to be an admin to do this")
    args = event.pattern_match.group(1)
    if not args:
        fedowner = sql.get_user_owner_fed_full(event.sender_id)
        if not fedowner:
            return await event.reply(
                "Only fed creators can set a fed log - but you don't have a federation!"
            )
        for f in fedowner:
            args = "{}".format(f["fed_id"])
            name = f["fed"]["fname"]
    else:
        if len(args) < 8:
            return await event.reply("This isn't a valid FedID format!")
        getfed = sql.search_fed_by_id(args)
        name = getfed["fname"]
        if not getfed:
            return await event.reply(
                "This FedID does not refer to an existing federation.")
    setlog = sql.set_fed_log(args, chat)
    await event.reply(
        f"This has been set as the fed log for {name} - all fed related actions will be logged here."
    )
Example #4
0
async def fd(event):
    if event.is_private:
        return await event.reply(
            "This command is made to be run in a group where the person you would like to promote is present."
        )
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "Only federation creators can promote people, and you don't seem to have a federation to promote to!"
        )
    args = await get_user_from_event(event)
    if not args:
        return await event.reply(
            "I don't know who you're talking about, you're going to need to specify a user...!"
        )
    chat = event.chat
    for f in fedowner:
        fed_id = f["fed_id"]
        name = f["fed"]["fname"]
    user_id = args.id
    if sql.search_user_in_fed(fed_id, user_id) is False:
        return await event.reply(
            f"This person isn't a federation admin for '{name} ', how could I demote them?"
        )
    replied_user = await xbot(GetFullUserRequest(user_id))
    fname = replied_user.user.first_name
    sql.user_demote_fed(fed_id, user_id)
    return await event.reply(
        f"User [{fname}](tg://user?id={user_id}) is no longer an admin of {name} ({fed_id})"
    )
Example #5
0
async def sk(event):
    if not event.is_private:
        return await event.reply("This command is made to be used in PM.")
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if fedowner:
        try:
            for f in fedowner:
                name = f["fed"]["fname"]
                fed_id = f["fed_id"]
            text = f"You are the **owner** of the following federation:\n`{fed_id}`: {name}"
            o = sql.get_user_admin_fed_full(event.sender_id)
            list = "\nYou are **admin** in the following federations:"
            for q in o:
                fname = q["fed"]["fname"]
                fid = q["fed_id"]
                list += f"\n-`{fid}`:{fname}"
            if len(q) < 10:
                txt = f"{text}\n{list}"
                await event.reply(txt)
            if len(q) > 10:
                text += f"\n\nLooks like {event.sender.first_name} is admin in quite a lot of federations; I'll have to make a file to list them all."
                buttons = [
                    Button.inline("Make the fedadmin file", data="fadmin")
                ]
                await event.reply(text, buttons=buttons)

        except Exception as e:
            await event.reply(f"{e}")
Example #6
0
async def ft(event):
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "It doesn't look like you have a federation yet!")
    for f in fedowner:
        fed_id = f["fed_id"]
    await event.reply("Soon!")
Example #7
0
async def info(event):
    if not event.is_private:
        if not await is_admin(event, event.sender_id):
            return await event.reply(
                "This command can only be used in private.")
    input = event.pattern_match.group(1)
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not input:
        if not fedowner:
            return await event.reply(
                "You need to give me a FedID to check, or be a federation creator to use this command!"
            )
    if input:
        fed_id = input
        info = sql.get_fed_info(fed_id)
        if not info:
            return await event.reply("There is no federation with this FedID.")
        name = info["fname"]
    elif fedowner:
        for f in fedowner:
            fed_id = f["fed_id"]
            name = f["fed"]["fname"]
        info = sql.get_fed_info(fed_id)
    if info:
        owner = int(info["owner"])
        getfban = sql.get_all_fban_users(fed_id)
        getfchat = sql.all_fed_chats(fed_id)
        FEDADMIN = sql.all_fed_users(fed_id)
        TotalAdminFed = len(FEDADMIN)

        caption = "Fed info:\n"
        caption += f"FedID: `{fed_id}`\n"
        caption += f"Name: {name}\n"
        caption += f"Creator: [this person](tg://user?id={owner}) (`{owner}`)\n"
        caption += f"Number of admins: `{TotalAdminFed}`\n"
        caption += f"Number of bans: `{len(getfban)}`\n"
        caption += f"Number of connected chats: `{len(getfchat)}`\n"
        try:
            subs = sql.get_subscriber(fed_id)
        except:
            subs = []
        caption += f"Number of subscribed feds: `{len(subs)}`"
        try:
            getmy = sql.get_mysubs(fed_id)
        except:
            getmy = []
        if len(getmy) == 0:
            caption += "\n\nThis federation is not subscribed to any other feds."
        else:
            caption += "\n\nSubscribed to the following feds:"
            for x in getmy:
                nfo = sql.get_fed_info(x)
                nme = nfo["fname"]
                caption += f"\n- {nme} (`{x}`)"
        buttons = Button.inline("Check Fed Admins",
                                data="fedadm_{}".format(fed_id))
        await xbot.send_message(event.chat_id, caption, buttons=buttons)
Example #8
0
async def ligunset(event):
    chat = event.chat_id
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "Only fed creators can unset a fed log - but you don't have a federation!"
        )
    for f in fedowner:
        args = f["fed_id"]
        name = f["fed"]["fname"]
    setlog = sql.set_fed_log(args, None)
    await event.reply(f"The {name} federation has had its log location unset.")
Example #9
0
async def p(event):
    if event.is_private:
        return await event.reply(
            "This command is made to be run in a group where the person you would like to promote is present."
        )
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "Only federation creators can promote people, and you don't seem to have a federation to promote to!"
        )
    args = await get_user_from_event(event)
    if not args:
        return await event.reply(
            "I don't know who you're talking about, you're going to need to specify a user...!"
        )
    chat = event.chat
    for f in fedowner:
        fed_id = f["fed_id"]
        name = f["fed"]["fname"]
    user_id = args.id
    fban, fbanreason, fbantime = sql.get_fban_user(fed_id, int(args.id))
    replied_user = await xbot(GetFullUserRequest(user_id))
    fname = replied_user.user.first_name
    print(69)
    if fban:
        if fbanreason != '':
            return await event.reply(
                f"User {fname} is fbanned in {name}. You should unfban them before promoting.\n\nReason:\n{fbanreason}"
            )
        else:
            return await event.reply(
                f"User {fname} is fbanned in {name}. You should unfban them before promoting."
            )
    getuser = sql.search_user_in_fed(fed_id, user_id)
    if getuser:
        return await event.reply(
            f"[{fname}](tg://user?id={args.id}) is already an admin in {name}!"
        )
    print(4)
    try:
        mk = f"{user_id}|{name[:5]}|{fed_id}"
        km = f"{user_id}|{event.sender_id}"
        await xbot.send_message(
            event.chat_id,
            f"Please get [{fname}](tg://user?id={args.id}) to confirm that they would like to be fed admin for {name}",
            buttons=[
                Button.inline("Confirm", data="fkfed_{}".format(mk)),
                Button.inline("Cancel", data="smex_{}".format(km)),
            ],
        )
    except Exception as e:
        print(e)
Example #10
0
async def fex(event):
    if event.is_group:
        fed_id = sql.get_fed_id(event.chat_id)
        if not fed_id:
            return await event.reply("This chat isn't in any federations.")
        else:
            if is_user_fed_owner(fed_id, int(event.sender_id)) is False:
                return await event.reply(
                    "Only the fed creator can export the ban list.")
    else:
        fedowner = sql.get_user_owner_fed_full(event.sender_id)
        if not fedowner:
            return await event.reply(
                "It doesn't look like you have a federation yet!")
        for f in fedowner:
            fed_id = f["fed_id"]
    info = sql.get_fed_info(fed_id)
    name = info["fname"]
    getfban = sql.get_all_fban_users(fed_id)
    if len(getfban) == 0:
        return await event.reply(f"There are no banned users in {name}")
    backups = ""
    try:
        for users in getfban:
            getuserinfo = sql.get_all_fban_users_target(fed_id, users)
            json_parser = [{
                "user_id": users,
                "first_name": getuserinfo["first_name"],
                "user_name": getuserinfo["user_name"]
            }]
            backups += json.dumps(json_parser)
            backups += "\n"
        with BytesIO(str.encode(backups)) as output:
            output.name = "fbanned_users.csv"
            await xbot.send_file(
                event.chat_id,
                file=output,
                filename="fbanned_users.csv",
                caption="Fbanned users in \n** {}**.".format(info["fname"]),
            )
    except Exception as e:
        print(e)
Example #11
0
async def cgname(event):
    if not event.is_private:
        return await event.reply("You can only rename your fed in PM.")
    user_id = event.sender_id
    newname = event.pattern_match.group(1)
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "It doesn't look like you have a federation yet!")
    if not newname:
        return await event.reply(
            "You need to give your federation a new name! Federation names can be up to 64 characters long."
        )
    for f in fedowner:
        fed_id = f["fed_id"]
        name = f["fed"]["fname"]
    sql.rename_fed(fed_id, user_id, newname)
    return await event.reply(
        f"Tada! I've renamed your federation from '{name}' to '{newname}'. [FedID: `{fed_id}`]."
    )
Example #12
0
async def smexy(event):
    if not event.is_private:
        return await event.reply(
            "Delete your federation in my PM - not in a group.")
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "It doesn't look like you have a federation yet!")
    for f in fedowner:
        fed_id = "{}".format(f["fed_id"])
        name = f["fed"]["fname"]
    await xbot.send_message(
        event.chat_id,
        "Are you sure you want to delete your federation? This action cannot be undone - you will lose your entire ban list, and '{}' will be permanently gone."
        .format(name),
        buttons=[
            [
                Button.inline("Delete Federation",
                              data="rmfed_{}".format(fed_id))
            ],
            [Button.inline("Cancel", data="nada")],
        ],
    )
Example #13
0
async def sub(event):
    args = event.pattern_match.group(1)
    fedowner = sql.get_user_owner_fed_full(event.sender_id)
    if not fedowner:
        return await event.reply(
            "Only federation creators can subscribe to a fed. But you don't have a federation!"
        )
    for f in fedowner:
        fed_id = f["fed_id"]
        name = f["fed"]["fname"]
    if not args:
        return await event.reply(
            "You need to specify which federation you're asking about by giving me a FedID!"
        )
    if len(args) < 8:
        return await event.reply("This isn't a valid FedID format!")
    getfed = sql.search_fed_by_id(args)
    if not getfed:
        return await event.reply(
            "This FedID does not refer to an existing federation.")
    sname = getfed["fname"]
    if args == fed_id:
        return await event.reply(
            "... What's the point in subscribing a fed to itself?")
    try:
        subs = sql.MYFEDS_SUBSCRIBER
    except:
        subs = []
    if len(subs) >= 5:
        return await event.reply(
            "You can subscribe to at most 5 federations. Please unsubscribe from other federations before adding more."
        )
    subfed = sql.subs_fed(args, fed_id)
    addsub = sql.add_sub(fed_id, args)
    await event.reply(
        f"Federation {name} has now subscribed to {sname}. All fedbans in {sname} will now take effect in both feds."
    )
Example #14
0
async def unfban(event):
    user = event.sender
    chat = event.chat_id
    if event.is_group:
        fed_id = sql.get_fed_id(chat)
        if not fed_id:
            return await event.reply("This chat isn't in any federations.")
    else:
        fedowner = sql.get_user_owner_fed_full(event.sender_id)
        if not fedowner:
            return await event.reply(
                "It doesn't look like you have a federation yet!")
        for f in fedowner:
            fed_id = "{}".format(f["fed_id"])
    info = sql.get_fed_info(fed_id)
    name = info["fname"]
    if is_user_fed_admin(fed_id, user.id) is False:
        return await event.reply(f"You aren't a federation admin for {name}!")
    input = event.pattern_match.group(1)
    if input:
        arg = input.split(" ", 1)
    if not event.reply_to_msg_id:
        if len(arg) == 2:
            iid = arg[0]
            reason = arg[1]
        else:
            iid = arg[0]
            reason = None
        if not iid.isnumeric():
            entity = await xbot.get_input_entity(iid)
            try:
                r_sender_id = entity.user_id
            except Exception:
                await event.reply("Couldn't fetch that user.")
                return
        else:
            r_sender_id = int(iid)
        try:
            replied_user = await xbot(GetFullUserRequest(r_sender_id))
            fname = replied_user.user.first_name
            username = replied_user.user.username
            lname = replied_user.user.last_name
        except Exception:
            fname = "User"
            username = None
            lname = None
    else:
        reply_message = await event.get_reply_message()
        iid = reply_message.sender_id
        fname = reply_message.sender.first_name
        lname = reply_message.sender.last_name
        username = reply_message.sender.username
        if input:
            reason = input
        else:
            reason = None
        r_sender_id = iid
    if r_sender_id == BOT_ID or r_sender_id == OWNER_ID or r_sender_id == 1100231654:
        return await event.reply(
            "Oh you're a funny one aren't you! How do you think I would have fbanned myself hm?."
        )
    name = info["fname"]
    fban_user_id = int(r_sender_id)
    fban_user_name = fname
    fban_user_lname = lname
    fban_user_uname = username
    fban, fbanreason, fbantime = sql.get_fban_user(fed_id, int(r_sender_id))
    if not fban:
        return await event.reply(
            f"This user isn't banned in the current federation, {name}. [{fed_id}]"
        )
    temp = sql.un_fban_user(fed_id, fban_user_id)
    if temp:
        sxa = "**New un-FedBan**\n"
        sxa += f"**Fed:** {name}\n"
        sxa += f"**FedAdmin:** [{event.sender.first_name}](tg://user?id={event.sender_id})\n"
        sxa += f"**User:** [{fname}](tg://user?id={r_sender_id})\n"
        sxa += f"**User ID:** `{r_sender_id}`\n"
        if reason:
            sxa += f"**Reason:** {reason}"
        await xbot.send_message(event.chat_id, sxa)
        getfednotif = sql.user_feds_report(info["owner"])
        if getfednotif:
            if int(info["owner"]) != int(chat):
                await xbot.send_message(int(info["owner"]), sxa)
        get_fedlog = sql.get_fed_log(fed_id)
        if get_fedlog:
            if int(get_fedlog) != int(chat):
                await xbot.send_message(int(get_fedlog), sxa)
Example #15
0
async def _(event):

    user = event.sender
    chat = event.chat_id
    if event.is_group:
        fed_id = sql.get_fed_id(chat)
        if not fed_id:
            return await event.reply("This chat isn't in any federations.")
    else:
        fedowner = sql.get_user_owner_fed_full(event.sender_id)
        if not fedowner:
            return await event.reply(
                "It doesn't look like you have a federation yet!")
        for f in fedowner:
            fed_id = "{}".format(f["fed_id"])
    info = sql.get_fed_info(fed_id)
    name = info["fname"]
    if is_user_fed_admin(fed_id, user.id) is False:
        return await event.reply(f"You aren't a federation admin for {name}!")
    input = event.pattern_match.group(1)
    if input:
        arg = input.split(" ", 1)
    if not event.reply_to_msg_id:
        if len(arg) == 2:
            iid = arg[0]
            reason = arg[1]
        else:
            iid = arg[0]
            reason = None
        if not iid.isnumeric():
            entity = await xbot.get_input_entity(iid)
            try:
                r_sender_id = entity.user_id
            except Exception:
                await event.reply("Couldn't fetch that user.")
                return
        else:
            r_sender_id = int(iid)
        try:
            replied_user = await xbot(GetFullUserRequest(r_sender_id))
            fname = replied_user.user.first_name
            username = replied_user.user.username
            lname = replied_user.user.last_name
        except Exception:
            fname = "User"
            username = None
            lname = None
    else:
        reply_message = await event.get_reply_message()
        iid = reply_message.sender_id
        fname = reply_message.sender.first_name
        lname = reply_message.sender.last_name
        username = reply_message.sender.username
        if input:
            reason = input
        else:
            reason = None
        r_sender_id = iid
    if r_sender_id == BOT_ID or r_sender_id == OWNER_ID or r_sender_id == 1100231654:
        return await event.reply(
            "Oh you're a funny one aren't you! I am _not_ going to fedban myself."
        )
    name = info["fname"]
    if is_user_fed_owner(fed_id, int(r_sender_id)) is True:
        return await event.reply(
            f"I'm not banning a fed admin from their own fed! [{name}]")
    if is_user_fed_admin(fed_id, int(r_sender_id)) is True:
        return await event.reply(
            f"I'm not banning a fed admin from their own fed! [{name}]")
    fban_user_id = int(r_sender_id)
    fban_user_name = fname
    fban_user_lname = lname
    fban_user_uname = username
    fban, fbanreason, fbantime = sql.get_fban_user(fed_id, int(r_sender_id))
    if fban:
        if fbanreason == '' and reason == None:
            return await event.reply(
                f'User [{fname}](tg://)/user?id={r_sender_id}) is already banned in {name}. There is no reason set for their fedban yet, so feel free to set one.'
            )
        if reason == fbanreason:
            return await event.reply(
                f'User [{fname}](tg://user?id={r_sender_id}) has already been fbanned, with the exact same reason.'
            )
        if reason == None:
            if fbanreason == '':
                return await event.reply(
                    f'User [{fname}](tg://user?id={r_sender_id}) is already banned in {name}.'
                )
            else:
                return await event.reply(
                    f'User [{fname}](tg://user?id={r_sender_id}) is already banned in {name}, with reason:\n`{fbanreason}`.'
                )
    if not fban:
        current_datetime = datetime.now(pytz.timezone("Asia/Kolkata"))
        kuk = f"{current_datetime}"
        mal = kuk[:10]
        rec = mal.replace("-", "")
        x = sql.fban_user(
            fed_id,
            fban_user_id,
            fban_user_name,
            fban_user_lname,
            fban_user_uname,
            reason,
            int(rec),
        )
        sax = "**New FedBan**\n"
        sax += f"**Fed:** {name}\n"
        sax += f"**FedAdmin:** [{event.sender.first_name}](tg://user?id={event.sender_id})\n"
        sax += f"**User:** [{fname}](tg://user?id={r_sender_id})\n"
        sax += f"**User ID:** `{r_sender_id}`\n"
        sax += f"**Reason:** {reason}"
    else:
        current_datetime = datetime.now(pytz.timezone("Asia/Kolkata"))
        kuk = f"{current_datetime}"
        mal = kuk[:10]
        rec = mal.replace("-", "")
        fed_name = info["fname"]
        temp = sql.un_fban_user(fed_id, fban_user_id)
        if not temp:
            await event.reply("Failed to update the reason for fedban!")
            return
        x = sql.fban_user(
            fed_id,
            fban_user_id,
            fban_user_name,
            fban_user_lname,
            fban_user_uname,
            reason,
            int(rec),
        )
        sax = "**FedBan Reason Update**\n"
        sax += f"**Fed:** {name}\n"
        sax += f"**FedAdmin:** [{event.sender.first_name}](tg://user?id={event.sender_id})\n"
        sax += f"**User:** [{fname}](tg://user?id={r_sender_id})\n"
        sax += f"**User ID:** `{r_sender_id}`\n"
        if not fbanreason == '':
            sax += f"**Previous Reason:** {fbanreason}\n"
        sax += f"**New Reason:** {reason}"
    await xbot.send_message(event.chat_id, sax)
    getfednotif = sql.user_feds_report(info["owner"])
    if getfednotif:
        if int(info["owner"]) != int(chat):
            await xbot.send_message(int(info["owner"]), sax)
    get_fedlog = sql.get_fed_log(fed_id)
    if get_fedlog:
        if int(get_fedlog) != int(chat):
            await xbot.send_message(int(get_fedlog), sax)
    fed_chats = list(sql.all_fed_chats(fed_id))
    if len(fed_chats) != 0:
        for fedschat in fed_chats:
            try:
                await xbot(
                    EditBannedRequest(int(fedschat), int(fban_user_id),
                                      BANNED_RIGHTS))
            except Exception:
                pass
    subscriber = list(sql.get_subscriber(fed_id))
    if len(subscriber) != 0:
        for fedsid in subscriber:
            all_fedschat = sql.all_fed_chats(fedsid)
            for fedschat in all_fedschat:
                try:
                    await xbot(
                        EditBannedRequest(int(fedschat), int(fban_user_id),
                                          BANNED_RIGHTS))
                except Exception:
                    continue