async def lang_with_arg(event): if not event.pattern_match.group(1): return arg = event.pattern_match.group(1).lower() K = await is_user_admin(event.chat_id, event.from_id) if K is False: await event.reply("You don't have rights to set language here!") return if arg not in LANGS: await event.reply("I don't support this language yet!") return old = mongodb.lang.find_one({'chat_id': event.chat_id}) if old: mongodb.notes.delete_one({'_id': old['_id']}) mongodb.lang.insert_one({'chat_id': event.chat_id, 'lang': arg}) redis.set('lang_cache_{}'.format(event.chat_id), arg) text = "Language changed to **{}**".format(arg) if 'translators' in LANGUAGES[arg]["language_info"]: text += "\n\n**Translators:**\n" for user in LANGUAGES[arg]["language_info"]['translators']: text += "• " text += await user_link(user) text += '\n' await event.reply(text)
def update_handlers_cache(chat_id): filters = mongodb.filters.find({'chat_id': chat_id}) lst = [] for filter in filters: lst.append(filter['handler']) dump = ujson.dumps(lst) redis.set('filters_cache_{}'.format(chat_id), dump)
async def update_admin_cache(chat_id): admin_list = await bot.get_participants( int(chat_id), filter=ChannelParticipantsAdmins()) admins = [] for admin in admin_list: admins.append(admin.id) dump = ujson.dumps(admins) redis.set('admins_cache_{}'.format(chat_id), dump) redis.expire('admins_cache_{}'.format(chat_id), 3600)
def get_chat_lang(chat_id): r = redis.get('lang_cache_{}'.format(chat_id)) if r: return r else: db_lang = mongodb.lang.find_one({'chat_id': chat_id}) if db_lang: # Rebuild lang cache redis.set('lang_cache_{}'.format(chat_id), db_lang['lang']) return db_lang['lang'] user_lang = mongodb.user_list.find_one({'user_id': chat_id}) if user_lang and user_lang['user_lang'] in LANGS: # Add telegram language in lang cache redis.set('lang_cache_{}'.format(chat_id), user_lang['user_lang']) return user_lang['user_lang'] else: return 'en'
async def event(event): user_id = event.original_update.user_id chat_id = re.search(r'connect_(.*)', str(event.data)).group(1)[:-1] chat_title = mongodb.chat_list.find_one({'chat_id': int(chat_id)}) old = mongodb.connections.find_one({'user_id': user_id}) mongodb.connections.delete_one({'_id': old['_id']}) mongodb.connections.insert_one({ 'user_id': user_id, 'chat_id': chat_id, 'btn1': old['btn1'], 'btn2': old['btn2'], 'btn3': old['btn3'], 'updated': old['updated'] }) redis.set('connection_cache_{}'.format(user_id), chat_id) await event.edit(get_string("connections", "connected", event.chat_id).format( chat_title['chat_title']))
async def set_lang_callback(event): chat = event.chat_id K = await is_user_admin(chat, event.original_update.user_id) if K is False: await event.answer("You don't have rights to set language here!", alert=True) return event_data = re.search(r'select_lang_(.*)', event.data.decode("utf-8")) lang = event_data.group(1) redis.set('lang_cache_{}'.format(chat), lang) old = mongodb.lang.find_one({'chat_id': chat}) if old: mongodb.notes.delete_one({'_id': old['_id']}) mongodb.lang.insert_one({'chat_id': chat, 'lang': lang}) text = "Language changed to **{}**!".format( LANGUAGES[lang]["language_info"]["name"] + " " + LANGUAGES[lang]["language_info"]["flag"]) if 'translators' in LANGUAGES[lang]["language_info"]: text += "\n\n**Translators:**\n" for user in LANGUAGES[lang]["language_info"]['translators']: text += "• " text += await user_link(user) text += '\n' await event.edit(text)
async def connect_with_arg(event): user_id = event.from_id if not event.chat_id == user_id: chat = event.chat_id chat = mongodb.chat_list.find_one({'chat_id': int(chat)}) else: if not event.pattern_match.group(1): return else: chat = event.message.raw_text.split(" ", 2)[1] if not chat[0] == '-': chat = mongodb.chat_list.find_one( {'chat_nick': chat.replace("@", "")}) if not chat: await event.reply( get_string("connections", "cant_find_chat_use_id", chat)) return else: chat = mongodb.chat_list.find_one({'chat_id': int(chat)}) if not chat: await event.reply( get_string("connections", "cant_find_chat", chat)) return chat_id = chat['chat_id'] chat_title = chat['chat_title'] user_chats = mongodb.user_list.find_one({'user_id': user_id}) if user_chats and 'chats' in user_chats: if chat_id not in user_chats['chats']: await event.reply(get_string("connections", "not_in_group", chat)) return history = mongodb.connections.find_one({'user_id': user_id}) if not history: mongodb.connections.insert_one({ 'user_id': user_id, 'chat_id': chat_id, 'btn1': chat_id, 'btn2': None, 'btn3': None, 'btn4': None, 'btn5': None, 'updated': 3 }) else: btn1 = history['btn1'] btn2 = history['btn2'] btn3 = history['btn3'] updated = history['updated'] if history['updated'] == 1 and chat_id != history[ 'btn2'] and chat_id != history['btn3']: btn1 = chat_id updated = 2 elif history['updated'] == 2 and chat_id != history[ 'btn1'] and chat_id != history['btn3']: btn2 = chat_id updated = 3 elif history['updated'] >= 3 and chat_id != history[ 'btn2'] and chat_id != history['btn1']: btn3 = chat_id updated = 1 mongodb.connections.delete_one({'_id': history['_id']}) mongodb.connections.insert_one({ 'user_id': user_id, 'chat_id': chat_id, 'btn1': btn1, 'btn2': btn2, 'btn3': btn3, 'updated': updated }) redis.set('connection_cache_{}'.format(user_id), chat_id) text = get_string("connections", "connected", chat).format(chat_title) if event.chat_id == user_id: await event.reply(text) else: try: await tbot.send_message(user_id, text) except (errors.rpcerrorlist.UserIsBlockedError, errors.rpcerrorlist.PeerIdInvalidError): await event.reply( get_string("connections", "connected_pm_to_me", chat).format(chat_title)) return await event.reply( get_string("connections", "pm_connected", chat).format(chat_title))