def new_adapt_option(message, vote_id): """Send option to De'Max to check if it's adequate""" LOG.log(str(message.from_user.id) + ": new_adapt_option invoked") send(CREATOR_ID, "[{}, '{}']".format(vote_id, message.text), reply_markup=ADAPT_ADEQUATE_KEYBOARD) reply(message, "Ваше мнение выслано на проверку")
def elite(message): """Start the basic logic test""" database = Database() if database.get('basic_logic_tested', ('id', message.from_user.id)) is None: send( message.chat.id, "Сейчас я буду давать вам утверждения. Выбирайте те, что из них логически вытекают" ) person = (message.from_user.id, 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None') database.append(person, 'basic_logic_tested') # Создаём список вопросов all_questions = list(range(1, 31)) for i in range(6): question = choice(all_questions) value = database.get('basic_logic', ('id', question))['text'] print(value) database.change(value, f'question_{i + 1}', 'basic_logic_tested', ('id', message.from_user.id)) all_questions.remove(question) for i in range(1, 7): if database.get('basic_logic_tested', ('id', message.from_user.id))[f'answer_{i}'] == "None": ask_question(message, i) break else: submit(message)
def trigger(message): """Reacts to some triggers in people's messages""" database = Database() chat_id = message.chat.id chat = database.get('chats', ('id', chat_id)) system_id = chat['system'] content_type = 'text' if message.voice: content_type = 'voice' trigger_entry = database.get('triggers', ('id', chat_id), ('sys_or_chat', 'chat'), ('content_type', content_type)) if not trigger_entry: trigger_entry = database.get('triggers', ('id', system_id), ('sys_or_chat', 'system'), ('content_type', content_type)) if trigger_entry: if trigger_entry['to_delete']: delete(chat_id, message.message_id) user = message.from_user print(user) text = str(trigger_entry['text_ans']).format(username=user.username, nickname=user.first_name, user_id=user.id) send(chat_id, text, parse_mode='HTML')
def money_give(message, person, parameters_dictionary: dict): """Функция обмена деньгами между людьми""" LOG.log(f"money_give invoked to person {person.id}") database = Database() getter = person giver = message.from_user money = parameters_dictionary['value'] system = database.get('chats', ('id', message.chat.id))['system'] value_getter = get_person(message, getter, system, database)['money'] value_giver = get_person(message, giver, system, database)['money'] money_name_word = get_word_object( get_system_configs(system)['money_name'], 'Russian') money_name = money_name_word.cased_by_number(abs(money), if_one_then_accusative=True) if money < 0: reply(message, "Я вам запрещаю воровать") elif money == 0: reply(message, "Я вам запрещаю делать подобные бессмысленные запросы") else: if money > value_giver: reply(message, "Не хватает {}".format(money_name_word.genitive_plural())) else: value_getter += money value_giver -= money giv_m = send(giver.id, "#Финансы\n\nВы успешно перевели {} {} на счёт {}. " "Теперь у вас их {}".format(money, money_name, person_link(getter), value_giver), parse_mode='HTML') get_m = send( getter.id, "#Финансы\n\nНа ваш счёт переведено {} {} со счёта {}. " "Теперь у вас их {}".format(money, money_name, person_link(giver), value_getter), parse_mode='HTML') if get_m: get_m = "🔔 уведомлён(а)" else: get_m = "🔕 не уведомлён(а)" if giv_m: giv_m = "🔔 уведомлён(а)" else: giv_m = "🔕 не уведомлён(а)" reply(message, "{} передал(а) {} {} {}!".format(person_link(giver), person_link(getter), money, money_name), parse_mode='HTML') send( admin_place(message, database), f"#Финансы #f{getter.id} #f{giver.id}\n\n" f"{person_link(getter)} [{value_getter - money} --> {value_getter}] {get_m}\n" f"{person_link(giver)} [{value_giver + money} --> {value_giver}] {giv_m}\n", parse_mode='HTML') database.change(value_getter, 'money', 'members', ('id', getter.id), ('system', system)) database.change(value_giver, 'money', 'members', ('id', giver.id), ('system', system))
def unwarn(message, person, parameters_dictionary: dict): """Снимает с участника предупреждение""" database = Database() unwarns = parameters_dictionary['value'] chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] value = database.get('members', ('id', person.id), ('system', system))['warns'] - unwarns if value >= 0: database.change(value, 'warns', 'members', ('id', person.id), ('system', system)) adm_place = admin_place(message, database) if adm_place: text = "#warns\n\n" text += "Пользователь {} потерял(а) {} варн(а) и их стало {}\n".format( person_info_in_html(person), unwarns, value) text += "Варн(ы) снят(ы) пользователем {}\n".format( person_info_in_html(message.from_user)) if 'comment' in parameters_dictionary.keys(): text += "Комментарий: {}".format( parameters_dictionary['comment']) send(adm_place, text, parse_mode='HTML') reply(message, "Варн(ы) снят(ы). Теперь их {}".format(value)) if 3 - unwarns <= value < 3: chat_configs = get_system_configs(system) unban_user(person) database.change(chat_configs['ranks'][1], 'rank', 'members', ('id', person.id), ('system', system)) else: reply(message, "Нельзя сделать отрицательное количество предупреждений")
def warn(message, person, parameters_dictionary): """Даёт участнику предупреждение""" database = Database() warns = parameters_dictionary['value'] chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] value = database.get('members', ('id', person.id), ('system', system))['warns'] + warns database.change(value, 'warns', 'members', ('id', person.id), ('system', system)) reply(message, "Варн(ы) выдан(ы). Теперь их {}".format(value)) adm_place = admin_place(message, database) if adm_place: send(adm_place, "Пользователь {} получил(а) {} варн(а) и их стало {}".format( person_info_in_html(person), warns, value), parse_mode='HTML') blowout = database.get('channels', ('name', 'Проколы'))['id'] how_many = 10 # Сколько пересылает сообщений end_forwarding = message.reply_to_message.message_id start_forwarding = end_forwarding - how_many send(blowout, "В чате {} случилось нарушение участником {} Прысылаю {} сообщений". format(chat_info_in_html(message.chat), person_info_in_html(person), how_many), parse_mode='HTML') for msg_id in range(start_forwarding, end_forwarding + 1): forward(blowout, message.chat.id, msg_id) if value >= 3: ban(message, person)
def send_short_top(message, language, format_string, start='', sort_key=lambda x: True): """Send a short version of a top for non-admins""" database = Database() # Declaring variables system = database.get('chats', ('id', message.chat.id))['system'] formating_dict = {'m_emo': get_system_configs(system)['money_emoji'], 'bot_money': database.get('systems', ('id', system))['money']} text = start.format(**formating_dict) members = database.get_many('members', ('system', system)) members = list(filter(lambda x: sort_key(x) != 0, members)) members.sort(key=sort_key, reverse=True) person_index = 0 for person_index in range(1, len(members) + 1): if members[person_index - 1]['id'] == message.from_user.id: break # Main loop for index in range(1, len(members) + 1): member = members[index - 1] p_link = link_text_wrapper(html_cleaner(member["nickname"]), f't.me/{member["username"]}') formating_dict.update(member) formating_dict.update({'index': index, 'p_link': p_link, 'day': member['day_birthday']}) if '{month}' in format_string: formating_dict['month'] = MONTHS_GENITIVE[member['month_birthday'] - 1][language] if index <= 5 or abs(index - person_index) <= 2: text += format_string.format(**formating_dict) elif '.\n.\n.\n' not in text and person_index >= 9: text += '.\n.\n.\n' if text: send(message.chat.id, text, parse_mode='HTML') else: reply(message, "Ничего нет!")
def place_here(call): """Выбирает, куда прислать голосовашку""" # Проверка, нажал ли на кнопку не тот, кто нужен where = None if call.data == 'here' or call.data == 'm_here' or call.data == 'a_here': where = call.message.chat.id elif call.data == 'there' or call.data == 'm_there' or call.data == 'a_there': where = -1001260953849 # Канал голосовашек elif 'nedostream' in call.data: where = -1001409685984 # Канал недостримов if call.message.reply_to_message.text.split()[0] == '/vote': vote_message = send(where, 'Голосование "{}"'.format(call.message.reply_to_message.text[6:]), reply_markup=VOTE_KEYBOARD) create_vote(vote_message) elif call.message.reply_to_message.text.split()[0] == '/multi_vote': answer = 'Мульти-голосование (вы можете предлагать варианты ' \ 'и выбирать несколько ответов)\n\n"{}"\n' vote_message = send(where, answer.format(call.message.reply_to_message.text[12:])) create_multi_vote(vote_message) elif call.message.reply_to_message.text.split()[0] == '/adapt_vote': answer = 'Адапт-голосование (вы можете предлагать варианты, ' \ 'но выбирать только 1 вариант)\n\n"{}"\n' vote_message = send(where, answer.format(call.message.reply_to_message.text[12:])) create_adapt_vote(vote_message) delete(call.message.chat.id, call.message.message_id)
def non_ironic(call): """Реакция, если обвинение было неироничным""" # Проверка, нажал ли на кнопку не тот, кто нужен edit_text("Неиронично!", call.message.chat.id, call.message.message_id) send(admin_place(call.message, Database()), "Произошло оскорбление! " + "[Ссылка на инцидент](t.me/{}/{})".format( call.message.reply_to_message.chat.username, call.message.reply_to_message.message_id), parse_mode="Markdown") answer_callback(call.id)
def submit(message): """Подсчитывает результаты""" database = Database() markup = ReplyKeyboardRemove(selective=False) # убираем клаву success = 0 # Переменная для подсчёта правильных ответов person = message.from_user for i in range(1, 7): if database.get( 'basic_logic', ('right', database.get('basic_logic_tested', ('id', message.from_user.id))[f'answer_{i}'])): success += 1 if success >= 4: send( person.id, "Поздравляю! Ваше количество баллов ({}) достаточно для прохождения" .format(success), reply_markup=markup) send( -1001233124059, '#тест_на_логику {} ({}) [{}] осилил(а) тест со счётом {}'.format( person.first_name, person.username, person.id, success)) else: send( person.id, "К сожалению, количество ваших правильных ответов ({}) недостаточно для прохождения" .format(success), reply_markup=markup) send( -1001233124059, '#тест_на_логику {} ({}) [{}] провалил(а) тест со счётом {}'. format(person.first_name, person.username, person.id, success))
def mute(message, person, parameters_dictionary): """Даёт участнику бан""" database = Database() hours = parameters_dictionary['value'] chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] for chat in full_chat_list(database, system): restrict(chat['id'], person.id, until_date=time() + hours * 3600) adm_place = admin_place(message, database) if adm_place: send(adm_place, "Пользователь {} получил(а) мут на {} час(ов)".format( person_info_in_html(person), hours), parse_mode='HTML') reply(message, "Мут выдан")
def send_some_top(message, language, format_string, start='', sort_key=lambda x: True): """Send a full version of a top for admins""" database = Database() # Declaring variables sent = False system = database.get('chats', ('id', message.chat.id))['system'] formating_dict = { 'm_emo': get_system_configs(system)['money_emoji'], 'bot_money': database.get('systems', ('id', system))['money'] } text = start.format(**formating_dict) members = database.get_many('members', ('system', system)) members = list(filter(lambda x: sort_key(x) != 0, members)) members.sort(key=sort_key, reverse=True) if len(members) > 50: target_chat = message.from_user.id else: target_chat = message.chat.id # Main loop for index in range(1, len(members) + 1): member = members[index - 1] p_link = link_text_wrapper(html_cleaner(member["nickname"]), f't.me/{member["username"]}') formating_dict.update(member) formating_dict.update({ 'index': index, 'p_link': p_link, 'day': member['day_birthday'] }) if '{month}' in format_string: formating_dict['month'] = MONTHS_GENITIVE[member['month_birthday'] - 1][language] text += format_string.format(**formating_dict) if index % 50 == 0: sent = send(target_chat, text, parse_mode='HTML') text = '' sent = send(target_chat, text, parse_mode='HTML') or sent if len(members) > 50: if sent: reply(message, "Выслал инфу в личку") else: reply(message, "Сначала запусти меня в личных сообщениях") elif not sent: reply(message, "Ничего нет!")
def anon_message(message): """Send an anonymous message to an admin place""" database = Database(to_log=False) systems = [x['system'] for x in database.get_many('members', ('id', message.from_user.id))] system = None system_specification_length = 0 if len(systems) == 1: system = systems[0] elif message.text.split()[1].isdecimal(): system = message.text.split()[1] system_specification_length += len(system) + 1 else: data = get_systems_json() text = "Вижу вы сидите в нескольких чатах. " \ "Чтобы уточнить, в какой админосостав отправлять сообщение, " \ "оформите вашу команду так:\n\n/anon <номер системы> <ваше послание>.\n\n " \ "Вот список систем:\n" names = [f"{sys} — {data[sys]['name']}" for sys in systems] reply(message, text + '\n'.join(names)) if system: system_entry = database.get('systems', ('id', system)) if system_entry: if system_entry['admin_place']: anon_message_text = ' '.join(message.text.split()[1:]) sent = send(system_entry['admin_place'], "#anon\n\n" + anon_message_text[system_specification_length:]) if sent: reply(message, "Сообщение успешно отправлено. Спасибо за ваше мнение!") else: reply(message, "Произошла ошибка!") else: reply(message, "У этой системы админосостав не отмечен") else: reply(message, "Этой системы не существует!")
def money_fund(message, parameters_dictionary): """Transfer money to the chat fund""" database = Database() giver = message.from_user money = parameters_dictionary['value'] chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] value_giver = database.get('members', ('id', giver.id), ('system', system))['money'] value_system = database.get('systems', ('id', system))['money'] money_name_word = get_word_object( get_system_configs(system)['money_name'], 'Russian') money_name = money_name_word.cased_by_number(abs(money), if_one_then_accusative=True) if money < 0: reply(message, "Я вам запрещаю воровать") elif money == 0: reply(message, "Я вам запрещаю делать подобные бессмысленные запросы") else: if money > value_giver: reply(message, "Не хватает {}".format(money_name_word.genitive_plural())) else: if value_system != 'inf': value_system = int(value_system) value_system += money value_giver -= money text = f"#Финансы\n\nВы успешно перевели {money} {money_name} в фонд чата. " \ f"Теперь у вас их {value_giver}" giv_m = value_marker(send(giver.id, text), "🔔 уведомлён(а)", "🔕 не уведомлён(а)") reply(message, "{} заплатил(а) в банк {} {}!".format( person_link(giver), money, money_name), parse_mode='HTML') answer = f"#Финансы #f{giver.id}\n\n" if value_system != 'inf': answer += f"#Бюджет [{value_system - money} --> {value_system}]\n" answer += f"{person_link(giver)} [{value_giver + money} --> {value_giver}] {giv_m}\n" send(admin_place(message, database), answer, parse_mode='HTML') database.change(value_giver, 'money', 'members', ('id', giver.id), ('system', system)) database.change(value_system, 'money', 'systems', ('id', system))
def add_stuff_to_storage(message, storage_name): """Add some media to media storage""" rep = message.reply_to_message storages_dict = get_storage_json() if rep: insert = photo_video_gif_get(rep) if insert: if list(insert) in storages_dict[storage_name]['contents']: reply(message, "У меня это уже есть)") else: storages_dict[storage_name]['contents'].append(insert) forward(CREATOR_ID, message.chat.id, rep.message_id) send(CREATOR_ID, f"Норм контент?) user={message.from_user.id}, " f"text={message.text}, id=<code>{insert[0]}</code>", parse_mode='HTML') write_storage_json(storages_dict) reply(message, "ОК!") else: reply(message, "Ответить надо на гифку, фотографию или видео") else: reply(message, "Надо ответить на медиа, которое нужно добавить")
def left_member(message): """Комментирует уход участника и прощается участником""" database = Database() chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] if chat['type'] == 'private': chat = chat['name'] else: chat = '@' + chat['link'] member = message.left_chat_member if message.from_user.id == member.id: # Чел вышел самостоятельно if feature_is_available(message.chat.id, system, 'moves_delete'): delete(message.chat.id, message.message_id) else: reply(message, "Минус чувачок") send(member.id, 'До встречи в ' + chat) elif feature_is_available(message.chat.id, system, 'moves_delete'): # Чела забанили delete(message.chat.id, message.message_id) # Notify admins if admin's chat exists admin_place = database.get('systems', ('id', system))['admin_place'] if admin_place: text = f'{person_info_in_html(member)} теперь не в {chat_info_in_html(message.chat)}' send(admin_place, text, parse_mode='HTML')
def ask_question(message, question): """Задаём вопрос""" database = Database() ask = database.get('basic_logic_tested', ('id', message.from_user.id))[f'question_{question}'] # Получаем вопрос note = database.get('basic_logic', ('text', ask)) # Получаем полную инфу о вопросе # Получаем варианты ответов на вопрос answers = [note['right'], note['wrong_1'], note['wrong_2']] shuffle(answers) # Перемешиваем ответы markup = ReplyKeyboardMarkup(row_width=3) # Создаём клавиатуру для ответов for i in answers: # Заполняем клавиатуру кнопками markup.add(i) sent = send(message.from_user.id, note['text'], reply_markup=markup) # Отправляем сообщение register_handler(sent, check, question) # Следующее сообщение будет проверяться, как ответ на вопрос
def rank_changer(message, person): """Changes person's rank""" database = Database() chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] chat_configs = get_system_configs(system) command = message.text.split()[0].split(sep='@')[0] adm_place = admin_place(message, database) if command in chat_configs["ranks_commands"]: rank_index = chat_configs["ranks_commands"].index(command) rank = chat_configs["ranks"][rank_index] database.change(rank, "rank", 'members', ('id', person.id), ('system', system)) reply(message, f"Теперь это {rank} по званию!") if adm_place: send(adm_place, "Пользователь {} получил(а) звание {}".format( person_info_in_html(person), rank), parse_mode='HTML') elif command in chat_configs["appointment_adders"]: appointment_index = chat_configs["appointment_adders"].index(command) appointment = chat_configs["appointments"][appointment_index] if not database.get('appointments', ('id', person.id), ('system', system), ('appointment', appointment)): database.append((person.id, system, appointment), "appointments") reply( message, f"Теперь это {appointment}. Поздравим человека с повышением!") if adm_place: send(adm_place, "Пользователь {} получил(а) должность {}".format( person_info_in_html(person), appointment), parse_mode='HTML') else: reply(message, "У этого человека и так есть эта должность") elif command in chat_configs["appointment_removers"]: appointment_index = chat_configs["appointment_removers"].index(command) appointment = chat_configs["appointments"][appointment_index] database.remove("appointments", ('id', person.id), ('system', system), ('appointment', appointment)) reply(message, f"Теперь это не {appointment}") if adm_place: send(adm_place, "Пользователь {} потерял(а) должность {}".format( person_info_in_html(person), appointment), parse_mode='HTML') unban_user(person) if is_suitable(message, person, 'boss', loud=False): give_admin(message, person, loud=False) else: del_admin(message, person, loud=False)
def ban(message, person, comment=True, unban_then=False): """Даёт участнику бан""" database = Database() blowout = database.get('channels', ('name', 'Проколы'))['id'] how_many = 3 # Сколько пересылает сообщений if not unban_then: end_forwarding = get_target_message(message).message_id start_forwarding = end_forwarding - how_many send(blowout, "В чате {} забанили участника {}. Прысылаю {} сообщений".format( chat_info_in_html(message.chat), person_info_in_html(person), how_many), parse_mode='HTML') for msg_id in range(start_forwarding, end_forwarding + 1): forward(blowout, message.chat.id, msg_id) if comment: send( message.chat.id, "Ну всё, этому челу " + "бан" * (not unban_then) + "кик" * unban_then) chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] chat_configs = get_system_configs(system) if not unban_then: database.change(chat_configs['ranks'][0], 'rank', 'members', ('id', person.id), ('system', system)) for chat in full_chat_list(database, system): kick(chat['id'], person.id) for channel in channel_list(database): kick(channel['id'], person.id) adm_place = admin_place(message, database) if adm_place: send(adm_place, "Пользователь {} получил(а) бан".format( person_info_in_html(person) + ', но сразу и разбан' * unban_then), parse_mode='HTML') if unban_then: unban_user(person)
def money_pay(message, person, parameters_dictionary): """Платит человеку деньги из бюджета чата""" LOG.log(f"money pay invoked to person {person.id}") database = Database() chat = database.get('chats', ('id', message.chat.id)) system = chat['system'] bot_money = database.get('systems', ('id', system))['money'] if bot_money != 'inf': bot_money = int(bot_money) p_id = person.id money = parameters_dictionary['value'] money_name_word = get_word_object( get_system_configs(system)['money_name'], 'Russian') money_name = money_name_word.cased_by_number(abs(money), if_one_then_accusative=True) person_money = get_person(message, person, system, database)['money'] if money == 0: reply(message, "Я вам запрещаю делать подобные бессмысленные запросы") elif money < 0: money = -int(money) # Делаем из отрицательного числа положительное if person_money - money >= 0: person_money -= money if bot_money != 'inf': bot_money += money sent = send( p_id, "#Финансы\n\n" f"С вашего счёта было снято {money} {money_name} в банк. " f"Теперь у вас {person_money}") sent = cf.value_marker(sent, "🔔 уведомлён(а)", "🔕 не уведомлён(а)") reply(message, 'У {} забрали {} {} в банк!'.format(person_link(person), money, money_name), parse_mode='HTML') answer = "#Финансы " + f"#f{p_id}\n\n" if bot_money != 'inf': answer += f"#Бюджет [{bot_money - money} --> {bot_money}]\n" answer += f"{person_link(person)} [{person_money + money} --> {person_money}] {sent}" send(admin_place(message, database), answer, parse_mode='HTML') else: reply( message, "У людей число {} должно быть больше нуля".format( money_name_word.genitive_plural())) else: if bot_money != 'inf' and bot_money < money: reply( message, "У нас нет столько {} в банке".format( money_name_word.genitive_plural())) else: person_money += money sent = send( p_id, "#Финансы\n\n" f"На ваш счёт было переведено {money} {money_name} из банка. " f"Теперь у вас {person_money}") sent = cf.value_marker(sent, "🔔 уведомлён(а)", "🔕 не уведомлён(а)") reply(message, '{} получил(а) из банка {} {}!'.format( person_link(person), money, money_name), parse_mode='HTML') answer = "#Финансы " + f"#f{p_id}\n\n" if bot_money != 'inf': bot_money -= money answer += f"#Бюджет [{bot_money + money} --> {bot_money}]\n" answer += f"{person_link(person)} [{person_money - money} --> {person_money}] {sent}" send(admin_place(message, database), answer, parse_mode='HTML') database.change(person_money, 'money', 'members', ('id', p_id), ('system', system)) if bot_money != 'inf': database.change(bot_money, 'money', 'systems', ('id', system))
def new_member(message, member): """Реагирует на вход в чат""" database = Database() # Declaring variables text = '' keyboard = None captcha = False sent = None name = html_cleaner(member.first_name) system = database.get('chats', ('id', message.chat.id))['system'] chat_configs = get_system_configs(system) if database.get('members', ('id', member.id), ('rank', chat_configs['ranks'][0]), ('system', system)) and \ feature_is_available(message.chat.id, system, 'violators_ban'): kick(message.chat.id, member.id) elif not cooldown(message, "entrance", timeout=database.get('systems', ('id', system))['entrance_cooldown'], notify=False, individual=False): kick_and_unban(message.chat.id, member.id) elif is_suitable(message, member, 'uber', loud=False) and feature_is_available( message.chat.id, system, 'admins_promote'): promote(message.chat.id, member.id, can_change_info=True, can_delete_messages=True, can_invite_users=True, can_restrict_members=True, can_pin_messages=True, can_promote_members=True) text += chat_configs['greetings']['full_admin'].format(name=name) elif is_suitable(message, member, 'boss', loud=False) and feature_is_available( message.chat.id, system, 'admins_promote'): promote(message.chat.id, member.id, can_change_info=False, can_delete_messages=True, can_invite_users=True, can_restrict_members=True, can_pin_messages=True, can_promote_members=False) text += chat_configs['greetings']['admin'].format(name=name) elif feature_is_available(message.chat.id, system, 'newbies_captched') and \ member.id == message.from_user.id and time() - message.date < 60: text = chat_configs['greetings']['captcha'].format(name=name) keyboard = create_captcha_keyboard() captcha = True else: text = chat_configs['greetings']['standard'].format(name=name) if feature_is_available(message.chat.id, system, 'moves_delete') and not feature_is_available( message.chat.id, system, 'newbies_captched'): delete(message.chat.id, message.message_id) else: sent = reply(message, text, reply_markup=keyboard, parse_mode='HTML') # Notify admins if admin's chat exists admin_place = database.get('systems', ('id', system))['admin_place'] if admin_place: text = f'{person_info_in_html(member)} теперь в {chat_info_in_html(message.chat)}' send(admin_place, text, parse_mode="HTML") if captcha: restrict(message.chat.id, member.id, until_date=time() + 300) captcha_ban = CaptchaBan(message, sent) captcha_ban.start()