def un_fban_user(fed_id, user_id): with FEDS_LOCK: r = SESSION.query(BansF).all() for I in r: if I.fed_id == fed_id: if int(I.user_id) == int(user_id): SESSION.delete(I) try: SESSION.commit() except: SESSION.rollback() return False finally: SESSION.commit() __load_all_feds_banned() return I
def connect(user_id, chat_id): with CONNECTION_INSERTION_LOCK: prev = SESSION.query(Connection).get((int(user_id))) if prev: SESSION.delete(prev) connect_to_chat = Connection(int(user_id), chat_id) SESSION.add(connect_to_chat) SESSION.commit() return True
def disconnect(user_id): with CONNECTION_INSERTION_LOCK: disconnect = SESSION.query(Connection).get((int(user_id))) if disconnect: SESSION.delete(disconnect) SESSION.commit() return True SESSION.close() return False
def remove_filter(chat_id, keyword): with CUST_FILT_LOCK: filt = SESSION.query(CustomFilters).get((str(chat_id), keyword)) if filt: if keyword in CHAT_FILTERS.get(str(chat_id), []): # Sanity check CHAT_FILTERS.get(str(chat_id), []).remove(keyword) with BUTTON_LOCK: prev_buttons = (SESSION.query(Buttons).filter( Buttons.chat_id == str(chat_id), Buttons.keyword == keyword).all()) for btn in prev_buttons: SESSION.delete(btn) SESSION.delete(filt) SESSION.commit() return True SESSION.close() return False
def subs_fed(fed_id, my_fed): check = get_spec_subs(fed_id, my_fed) if check: return False with FEDS_SUBSCRIBER_LOCK: subsfed = FedSubs(fed_id, my_fed) SESSION.merge(subsfed) # merge to avoid duplicate key issues SESSION.commit() # Temporary Data For Subbed Feds if FEDS_SUBSCRIBER.get(fed_id, set()) == set(): FEDS_SUBSCRIBER[fed_id] = {my_fed} else: FEDS_SUBSCRIBER.get(fed_id, set()).add(my_fed) # Temporary data for Fed Subs if MYFEDS_SUBSCRIBER.get(my_fed, set()) == set(): MYFEDS_SUBSCRIBER[my_fed] = {fed_id} else: MYFEDS_SUBSCRIBER.get(my_fed, set()).add(fed_id) return True
def set_frules(fed_id, rules): with FEDS_LOCK: global FEDERATION_BYOWNER, FEDERATION_BYFEDID, FEDERATION_BYNAME # Variables getfed = FEDERATION_BYFEDID.get(str(fed_id)) owner_id = getfed["owner"] fed_name = getfed["fname"] fed_members = getfed["fusers"] fed_rules = str(rules) fed_log = getfed["flog"] # Set user FEDERATION_BYOWNER[str(owner_id)]["frules"] = fed_rules FEDERATION_BYFEDID[str(fed_id)]["frules"] = fed_rules FEDERATION_BYNAME[fed_name]["frules"] = fed_rules # Set on database fed = Federations(str(owner_id), fed_name, str(fed_id), fed_rules, fed_log, str(fed_members)) SESSION.merge(fed) SESSION.commit() return True
def rm_note(chat_id, note_name): with NOTES_INSERTION_LOCK: note = (SESSION.query(Notes).filter( func.lower(Notes.name) == note_name, Notes.chat_id == str(chat_id)).first()) if note: with BUTTONS_INSERTION_LOCK: buttons = (SESSION.query(Buttons).filter( Buttons.chat_id == str(chat_id), Buttons.note_name == note_name).all()) for btn in buttons: SESSION.delete(btn) SESSION.delete(note) SESSION.commit() return True else: SESSION.close() return False
def is_locked(chat_id, lock_type): curr_perm = SESSION.query(Permissions).get(str(chat_id)) SESSION.close() if not curr_perm: return False elif lock_type == "sticker": return curr_perm.sticker elif lock_type == "photo": return curr_perm.photo elif lock_type == "audio": return curr_perm.audio elif lock_type == "voice": return curr_perm.voice elif lock_type == "contact": return curr_perm.contact elif lock_type == "video": return curr_perm.video elif lock_type == "document": return curr_perm.document elif lock_type == "gif": return curr_perm.gif elif lock_type == "url": return curr_perm.url elif lock_type == "bots": return curr_perm.bots elif lock_type == "forward": return curr_perm.forward elif lock_type == "game": return curr_perm.game elif lock_type == "location": return curr_perm.location elif lock_type == "rtl": return curr_perm.rtl elif lock_type == "button": return curr_perm.button elif lock_type == "egame": return curr_perm.egame elif lock_type == "inline": return curr_perm.inline
def update_restriction(chat_id, restr_type, locked): with RESTR_LOCK: curr_restr = SESSION.query(Restrictions).get(str(chat_id)) if not curr_restr: curr_restr = init_restrictions(chat_id) if restr_type == "messages": curr_restr.messages = locked elif restr_type == "media": curr_restr.media = locked elif restr_type == "other": curr_restr.other = locked elif restr_type == "previews": curr_restr.preview = locked elif restr_type == "all": curr_restr.messages = locked curr_restr.media = locked curr_restr.other = locked curr_restr.preview = locked SESSION.add(curr_restr) SESSION.commit()
def disapprove(chat_id, user_id): with APPROVE_INSERTION_LOCK: disapprove_user = SESSION.query(Approvals).get((str(chat_id), user_id)) if disapprove_user: SESSION.delete(disapprove_user) SESSION.commit() return True else: SESSION.close() return False
def reset_warns(user_id, chat_id): with WARN_INSERTION_LOCK: warned_user = SESSION.query(Warns).get((user_id, str(chat_id))) if warned_user: warned_user.num_warns = 0 warned_user.reasons = [] SESSION.add(warned_user) SESSION.commit() SESSION.close()
def __load_all_feds(): global FEDERATION_BYOWNER, FEDERATION_BYFEDID, FEDERATION_BYNAME try: feds = SESSION.query(Federations).all() for x in feds: # remove tuple by ( ,) # Fed by Owner check = FEDERATION_BYOWNER.get(x.owner_id) if check is None: FEDERATION_BYOWNER[x.owner_id] = [] FEDERATION_BYOWNER[str(x.owner_id)] = { "fid": str(x.fed_id), "fname": x.fed_name, "frules": x.fed_rules, "flog": x.fed_log, "fusers": str(x.fed_users), } # Fed By FedId check = FEDERATION_BYFEDID.get(x.fed_id) if check is None: FEDERATION_BYFEDID[x.fed_id] = [] FEDERATION_BYFEDID[str(x.fed_id)] = { "owner": str(x.owner_id), "fname": x.fed_name, "frules": x.fed_rules, "flog": x.fed_log, "fusers": str(x.fed_users), } # Fed By Name check = FEDERATION_BYNAME.get(x.fed_name) if check is None: FEDERATION_BYNAME[x.fed_name] = [] FEDERATION_BYNAME[x.fed_name] = { "fid": str(x.fed_id), "owner": str(x.owner_id), "frules": x.fed_rules, "flog": x.fed_log, "fusers": str(x.fed_users), } finally: SESSION.close()
def get_fban_user(fed_id, user_id): list_fbanned = FEDERATION_BANNED_USERID.get(fed_id) if list_fbanned is None: FEDERATION_BANNED_USERID[fed_id] = [] if user_id in FEDERATION_BANNED_USERID[fed_id]: r = SESSION.query(BansF).all() reason = None for I in r: if I.fed_id == fed_id and int(I.user_id) == int(user_id): reason = I.reason time = I.time return True, reason, time return False, None, None
def __load_all_feds_chats(): global FEDERATION_CHATS, FEDERATION_CHATS_BYID try: qall = SESSION.query(ChatF).all() FEDERATION_CHATS = {} FEDERATION_CHATS_BYID = {} for x in qall: # Federation Chats check = FEDERATION_CHATS.get(x.chat_id) if check is None: FEDERATION_CHATS[x.chat_id] = {} FEDERATION_CHATS[x.chat_id] = { "chat_name": x.chat_name, "fid": x.fed_id } # Federation Chats By ID check = FEDERATION_CHATS_BYID.get(x.fed_id) if check is None: FEDERATION_CHATS_BYID[x.fed_id] = [] FEDERATION_CHATS_BYID[x.fed_id].append(x.chat_id) finally: SESSION.close()
def remove_warn_filter(chat_id, keyword): with WARN_FILTER_INSERTION_LOCK: warn_filt = SESSION.query(WarnFilters).get((str(chat_id), keyword)) if warn_filt: if keyword in WARN_FILTERS.get(str(chat_id), []): # sanity check WARN_FILTERS.get(str(chat_id), []).remove(keyword) SESSION.delete(warn_filt) SESSION.commit() return True SESSION.close() return False
def set_custom_welcome( chat_id, custom_content, custom_welcome, welcome_type, buttons=None, ): if buttons is None: buttons = [] with INSERTION_LOCK: welcome_settings = SESSION.query(Welcome).get(str(chat_id)) if not welcome_settings: welcome_settings = Welcome(str(chat_id), True) if custom_welcome or custom_content: welcome_settings.custom_content = custom_content welcome_settings.custom_welcome = custom_welcome welcome_settings.welcome_type = welcome_type.value else: welcome_settings.custom_welcome = DEFAULT_WELCOME welcome_settings.welcome_type = Types.TEXT.value SESSION.add(welcome_settings) with WELC_BTN_LOCK: prev_buttons = (SESSION.query(WelcomeButtons).filter( WelcomeButtons.chat_id == str(chat_id)).all()) for btn in prev_buttons: SESSION.delete(btn) for b_name, url, same_line in buttons: button = WelcomeButtons(chat_id, b_name, url, same_line) SESSION.add(button) SESSION.commit()
def rm_afk(user_id): with INSERTION_LOCK: curr = SESSION.query(AFK).get(user_id) if curr: if user_id in AFK_USERS: # sanity check del AFK_USERS[user_id] SESSION.delete(curr) SESSION.commit() return True SESSION.close() return False
def rm_from_stickers(chat_id, trigger): with STICKERS_FILTER_INSERTION_LOCK: stickers_filt = SESSION.query(StickersFilters).get((str(chat_id), trigger)) if stickers_filt: if trigger in CHAT_STICKERS.get(str(chat_id), set()): # sanity check CHAT_STICKERS.get(str(chat_id), set()).remove(trigger) SESSION.delete(stickers_filt) SESSION.commit() return True SESSION.close() return False
def unsubs_fed(fed_id, my_fed): with FEDS_SUBSCRIBER_LOCK: getsubs = SESSION.query(FedSubs).get((fed_id, my_fed)) if getsubs: if my_fed in FEDS_SUBSCRIBER.get(fed_id, set()): # sanity check FEDS_SUBSCRIBER.get(fed_id, set()).remove(my_fed) SESSION.delete(getsubs) SESSION.commit() return True SESSION.close() return False
def __load_all_feds_banned(): global FEDERATION_BANNED_USERID, FEDERATION_BANNED_FULL try: FEDERATION_BANNED_USERID = {} FEDERATION_BANNED_FULL = {} qall = SESSION.query(BansF).all() for x in qall: check = FEDERATION_BANNED_USERID.get(x.fed_id) if check is None: FEDERATION_BANNED_USERID[x.fed_id] = [] if int(x.user_id) not in FEDERATION_BANNED_USERID[x.fed_id]: FEDERATION_BANNED_USERID[x.fed_id].append(int(x.user_id)) check = FEDERATION_BANNED_FULL.get(x.fed_id) if check is None: FEDERATION_BANNED_FULL[x.fed_id] = {} FEDERATION_BANNED_FULL[x.fed_id][x.user_id] = { "first_name": x.first_name, "last_name": x.last_name, "user_name": x.user_name, "reason": x.reason, "time": x.time, } finally: SESSION.close()
def enable_command(chat_id, enable): with DISABLE_INSERTION_LOCK: disabled = SESSION.query(Disable).get((str(chat_id), enable)) if disabled: if enable in DISABLED.get(str(chat_id)): # sanity check DISABLED.setdefault(str(chat_id), set()).remove(enable) SESSION.delete(disabled) SESSION.commit() return True SESSION.close() return False
def remove_warn(user_id, chat_id): with WARN_INSERTION_LOCK: removed = False warned_user = SESSION.query(Warns).get((user_id, str(chat_id))) if warned_user and warned_user.num_warns > 0: warned_user.num_warns -= 1 warned_user.reasons = warned_user.reasons[:-1] SESSION.add(warned_user) SESSION.commit() removed = True SESSION.close() return removed
def disable_command(chat_id, disable): with DISABLE_INSERTION_LOCK: disabled = SESSION.query(Disable).get((str(chat_id), disable)) if not disabled: DISABLED.setdefault(str(chat_id), set()).add(disable) disabled = Disable(str(chat_id), disable) SESSION.add(disabled) SESSION.commit() return True SESSION.close() return False
def global_unignore_command(command): command = command.lower() with CLEANER_GLOBAL_LOCK: unignored = SESSION.query(CleanerBlueTextGlobal).get(str(command)) if unignored: if command in GLOBAL_IGNORE_COMMANDS: GLOBAL_IGNORE_COMMANDS.remove(command) SESSION.delete(command) SESSION.commit() return True SESSION.close() return False
def global_ignore_command(command): command = command.lower() with CLEANER_GLOBAL_LOCK: ignored = SESSION.query(CleanerBlueTextGlobal).get(str(command)) if not ignored: GLOBAL_IGNORE_COMMANDS.add(command) ignored = CleanerBlueTextGlobal(str(command)) SESSION.add(ignored) SESSION.commit() return True SESSION.close() return False
def rm_from_blacklist(chat_id, trigger): with BLACKLIST_FILTER_INSERTION_LOCK: blacklist_filt = SESSION.query(BlackListFilters).get( (str(chat_id), trigger)) if blacklist_filt: if trigger in CHAT_BLACKLISTS.get(str(chat_id), set()): # sanity check CHAT_BLACKLISTS.get(str(chat_id), set()).remove(trigger) SESSION.delete(blacklist_filt) SESSION.commit() return True SESSION.close() return False
def migrate_chat(old_chat_id, new_chat_id): with PERM_LOCK: perms = SESSION.query(Permissions).get(str(old_chat_id)) if perms: perms.chat_id = str(new_chat_id) SESSION.commit() with RESTR_LOCK: rest = SESSION.query(Restrictions).get(str(old_chat_id)) if rest: rest.chat_id = str(new_chat_id) SESSION.commit()
def __load_cleaner_list(): global GLOBAL_IGNORE_COMMANDS global CLEANER_CHATS try: GLOBAL_IGNORE_COMMANDS = { int(x.command) for x in SESSION.query(CleanerBlueTextGlobal).all() } finally: SESSION.close() try: for x in SESSION.query(CleanerBlueTextChatSettings).all(): CLEANER_CHATS.setdefault(x.chat_id, {"setting": False, "commands": set()}) CLEANER_CHATS[x.chat_id]["setting"] = x.is_enable finally: SESSION.close() try: for x in SESSION.query(CleanerBlueTextChat).all(): CLEANER_CHATS.setdefault(x.chat_id, {"setting": False, "commands": set()}) CLEANER_CHATS[x.chat_id]["commands"].add(x.command) finally: SESSION.close()
def migrate_chat(old_chat_id, new_chat_id): with INSERTION_LOCK: chat = SESSION.query(Chats).get(str(old_chat_id)) if chat: chat.chat_id = str(new_chat_id) SESSION.commit() chat_members = ( SESSION.query(ChatMembers) .filter(ChatMembers.chat == str(old_chat_id)) .all() ) for member in chat_members: member.chat = str(new_chat_id) SESSION.commit()
def __migrate_filters(): try: all_filters = SESSION.query(CustomFilters).distinct().all() for x in all_filters: if x.is_document: file_type = Types.DOCUMENT elif x.is_image: file_type = Types.PHOTO elif x.is_video: file_type = Types.VIDEO elif x.is_sticker: file_type = Types.STICKER elif x.is_audio: file_type = Types.AUDIO elif x.is_voice: file_type = Types.VOICE else: file_type = Types.TEXT print(str(x.chat_id), x.keyword, x.reply, file_type.value) if file_type == Types.TEXT: filt = CustomFilters( str(x.chat_id), x.keyword, x.reply, file_type.value, None, ) else: filt = CustomFilters( str(x.chat_id), x.keyword, None, file_type.value, x.reply, ) SESSION.add(filt) SESSION.commit() finally: SESSION.close()