Example #1
0
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, "Ваше мнение выслано на проверку")
Example #2
0
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)
Example #3
0
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))
Example #5
0
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,
              "Нельзя сделать отрицательное количество предупреждений")
Example #6
0
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)
Example #7
0
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, "Ничего нет!")
Example #8
0
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)
Example #9
0
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)
Example #10
0
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))
Example #11
0
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, "Ничего нет!")
Example #13
0
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))
Example #15
0
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, "Надо ответить на медиа, которое нужно добавить")
Example #16
0
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')
Example #17
0
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)  # Следующее сообщение будет проверяться, как ответ на вопрос
Example #18
0
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)
Example #19
0
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)
Example #20
0
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))
Example #21
0
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()