Beispiel #1
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, "Ничего нет!")
Beispiel #2
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,
              "Нельзя сделать отрицательное количество предупреждений")
Beispiel #3
0
def send_me(message, person):
    """Присылает человеку его запись в БД"""
    LOG.log(str(message.from_user.id) + ": send_me invoked")
    database = Database()
    system = database.get('chats', ('id', message.chat.id))['system']
    chat_config = get_system_configs(system)
    money_name = chat_config['money_name']
    money_name_word = get_word_object(money_name, 'ru')
    member_update(system, person)  # Update person's messages, nickname and username
    person_entry = get_person(message, person, system, database, system_configs=chat_config)
    appointments = [x['appointment'] for x in
                    database.get_many('appointments', ('id', person.id), ('system', system))]
    messages_here = 0
    if database.get('messages', ('person_id', person.id), ('chat_id', message.chat.id)):
        messages_here = database.get('messages', ('person_id', person.id),
                                     ('chat_id', message.chat.id))['messages']
    msg = 'ID: {}\n'.format(person_entry['id'])
    msg += 'Юзернейм: {}\n'.format(person_entry['username'])
    msg += 'Никнейм: {}\n'.format(person_entry['nickname'])
    msg += 'Ранг: {}\n'.format(person_entry['rank'])
    msg += 'Кол-во сообщений в этом чате: {}\n'.format(messages_here)
    if person_entry['messages']:
        msg += 'Кол-во сообщений во всей системе: {}\n'.format(person_entry['messages'])
    msg += 'Кол-во предупреждений: {}\n'.format(person_entry['warns'])
    if chat_config['money']:
        msg += 'Кол-во {}: {}\n'.format(money_name_word.genitive_plural(),
                                        person_entry['money'])
    if appointments:
        msg += 'Должности: ' + ', '.join(appointments)
    reply(message, msg)
def admins(message):
    """@-mention all admins"""
    database = Database()
    chat = database.get('chats', ('id', message.chat.id))
    system = chat['system']
    chat_config = get_system_configs(system)
    boss = chat_config['commands']['boss']
    ranks = chat_config['ranks']
    admins_username = []
    if isinstance(boss, list):
        all_ranks = ranks[ranks.index(boss[0]):ranks.index(boss[1]) + 1]
        for rank in all_ranks:
            admins_username += [
                '@' + x['username']
                for x in database.get_many('members', ('rank',
                                                       rank), ('system',
                                                               system))
            ]
    elif isinstance(boss, str):
        admins_id = [
            admin['id']
            for admin in database.get_many('appointments', ('appointment',
                                                            boss))
        ]
        admins_username = [
            '@' + database.get('members', ('id', admin),
                               ('system', system))['username']
            for admin in admins_id
        ]
    reply(message, 'Вызываю сюда админов: ' + ', '.join(admins_username))
Beispiel #5
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)
Beispiel #6
0
def feature_is_available(chat_id, system, command_type):
    """Checks if some feature is available in this system"""
    database = Database()
    command_mode = database.get('chats', ('id', chat_id))[command_type]
    if command_mode == 1:
        return True
    elif command_mode == 2:
        return database.get('systems', ('id', system), (command_type, 2))
    return False
Beispiel #7
0
def counter(message, person):
    """Подсчитывает сообщения, отправленные челом"""
    database = Database()
    if not database.get('messages', ('person_id', person.id),
                        ('chat_id', message.chat.id)):
        database.append((person.id, message.chat.id, 0), 'messages')
    messages = database.get('messages', ('person_id', person.id),
                            ('chat_id', message.chat.id))['messages']
    database.change(messages + 1, 'messages', 'messages',
                    ('person_id', person.id), ('chat_id', message.chat.id))
Beispiel #8
0
def money_reset(message):
    """Take all users' money to a system fund"""
    database = Database()
    system = database.get('chats', ('id', message.chat.id))['system']
    system_money = database.get('systems', ('id', system))['money']
    members = database.get_many('members', ('system', system))

    # Get the amount of money of chat members
    members_money = sum([member['money'] for member in members])
    if system_money != 'inf':
        database.increase(members_money, 'money', 'systems', ('id', system))
    database.change(0, 'money', 'members', ('system', system))
    reply(message, "OK")
Beispiel #9
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)
Beispiel #10
0
def get_person(message,
               person,
               system: str,
               database: Database,
               system_configs=None) -> dict:
    """Get entry about some person in some system, create if there wasn't"""
    person_entry = database.get('members', ('id', person.id),
                                ('system', system))
    if not person_entry:
        if not system_configs:
            system_configs = get_system_configs(system)
        add_person(message, person, system, database, system_configs)
        person_entry = database.get('members', ('id', person.id),
                                    ('system', system))
    return person_entry
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, "Ничего нет!")
Beispiel #12
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, "Этой системы не существует!")
Beispiel #13
0
def cooldown(message, command, timeout=3600):
    """Checks if the function is ready to be used again"""
    if message.chat.id > 0:  # Command is used in PM's
        return True
    database = Database()
    # Получаем наименование необходимой команды
    entry = database.get('cooldown', ('person_id', message.from_user.id),
                         ('command', command), ('chat_id', message.chat.id))
    if not entry:  # Чел впервые пользуется коммандой
        database.append(
            (message.from_user.id, command, message.chat.id, message.date),
            'cooldown')

        return True
    # Чел уже пользовался командой
    time_passed = message.date - entry['time']
    if time_passed < timeout:  # Кулдаун не прошёл
        seconds = timeout - time_passed
        minutes = seconds // 60
        seconds %= 60
        answer = "Воу, придержи коней, ковбой. Ты сможешь воспользоваться этой командой только "
        answer += f"через {minutes} минут и {seconds} секунд 🤠"
        reply(message, answer)

        return False
    # Кулдаун прошёл
    database.change(message.date, 'time', 'cooldown',
                    ('person_id', message.from_user.id), ('command', command),
                    ('chat_id', message.chat.id))
    return True
Beispiel #14
0
def language_setter(message):
    """Sets the language of the chat"""
    database = Database()
    original_languages = ['Русский', 'English']
    english_languages = ['Russian', 'English']
    language = message.text[6:].title()
    if language in original_languages + english_languages:
        if language in original_languages:
            language = (language, ORIGINAL_TO_ENGLISH[language])
        else:  # language in english_languages
            language = (ENGLISH_TO_ORIGINAL[language], language)
        if database.get('languages', ('id', message.chat.id)):
            database.change(language[1], 'language', 'languages',
                            ('id', message.chat.id))
        else:
            database.append((message.chat.id, language[1]), 'languages')
        if language[0] == language[1]:
            reply(message, f"✅ {language[0]} ✅")
        else:
            reply(message, f"✅ {language[0]} | {language[1]} ✅")
    else:
        answer = ''
        answer += "Если вы говорите на русском, напишите '/lang Русский'\n\n"
        answer += "If you speak English, type '/lang English'\n\n"
        reply(message, answer)
Beispiel #15
0
def get_languages(message):
    """Gets all languages that are possibly spoken by user
    :param message: message
    :return dictionary {"Russian": bool, "English": bool}
    :rtype dict"""
    database = Database()
    entry = database.get('languages', ('id', message.chat.id))
    languages = {"Russian": False, "English": False}
    if entry:
        languages[entry['language']] = True
        return languages
    russian = set(
        "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ")
    english = set("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM")
    text = message.text
    # filling the variable text chat title, description etc.
    if message.chat.id > 0:
        user = message.from_user
        text += user.first_name
        if user.last_name:
            text += user.last_name
    else:
        chat = get_chat(message.chat.id)
        if chat.title:
            text += chat.title
        if chat.description:
            text += chat.description
    text = set(text)
    languages['Russian'] = bool(russian
                                & text) or (message.from_user.language_code
                                            == 'ru')
    languages['English'] = bool(english
                                & text) or (message.from_user.language_code
                                            == 'en')
    return languages
def system_check(message):
    """Show which options are chosen in system"""
    database = Database()
    chat = database.get('chats', ('id', message.chat.id))
    system = database.get('systems', ('id', chat['system']))
    print(system)
    text = 'Настройки по умолчанию:\n\n'
    for feature in FEATURES:
        system_property = system[feature]
        if system_property == 2:
            text += f"{FEATURES_TEXTS['Russian'][FEATURES.index(feature)]}: \n✅ Включено\n"
            text += f"/s_{feature}_off Выключить\n\n"
        elif system_property == 1:
            text += f"{FEATURES_TEXTS['Russian'][FEATURES.index(feature)]}: \n❌ Выключено\n"
            text += f"/s_{feature}_on Включить\n\n"
    reply(message, text)
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))
Beispiel #18
0
def cooldown(message, command, timeout=3600, notify=True, individual=True):
    """Checks if the function is ready to be used again"""
    if message.chat.id > 0:  # Command is used in PM's
        return True
    database = Database()
    person_id = 0
    if individual:
        person_id = message.from_user.id
    entry = database.get('cooldown', ('person_id', person_id),
                         ('command', command), ('chat_id', message.chat.id))
    if not entry:  # Person uses this command for the first time
        database.append((person_id, command, message.chat.id, message.date),
                        'cooldown')
        return True
    # The command is already used
    time_passed = message.date - entry['time']
    if time_passed < timeout:  # Кулдаун не прошёл
        seconds = timeout - time_passed
        minutes = seconds // 60
        seconds %= 60
        if notify:
            if individual:
                answer = "Воу, придержи коней, ковбой. Ты сможешь воспользоваться этой командой только "
                answer += f"через {minutes} минут и {seconds} секунд 🤠"
            else:
                answer = "Воу, придержите коней, ковбои. Вы сможете воспользоваться этой командой только "
                answer += f"через {minutes} минут и {seconds} секунд 🤠"
            reply(message, answer)

        return False
    # Кулдаун прошёл
    database.change(message.date, 'time', 'cooldown', ('person_id', person_id),
                    ('command', command), ('chat_id', message.chat.id))
    return True
Beispiel #19
0
def check_access_to_a_storage(message,
                              storage_name,
                              is_write_mode,
                              to_check_vulgarity=True):
    """Checks if some storage can be accessed"""
    database = Database()
    storages_dict = get_storage_json()
    if storage_name in storages_dict.keys():
        storage = storages_dict[storage_name]
        if is_write_mode:
            if message.from_user.id not in storage['moders']:
                reply(
                    message,
                    "У вас отсутствует разрешение добавлять контент в это хранилище :-("
                )
                return False
            return True
        if message.chat.id > 0:
            return True
        system = database.get('chats', ('id', message.chat.id))['system']
        if to_check_vulgarity and storage['is_vulgar']:
            return loud_feature_is_available(message, message.chat.id, system,
                                             'erotic_commands')
        return loud_feature_is_available(message, message.chat.id, system,
                                         'standard_commands')
    reply(message, "Хранилища '{}' не существует".format(storage_name))
    return False
Beispiel #20
0
def is_suitable(inputed, person, command_type, system=None, loud=True):
    """Function to check if this command can be permitted in current chat"""
    database = Database()
    # determine if input is a message or a callback query
    if isinstance(inputed, CallbackQuery):
        message = inputed.message
    else:
        message = inputed
    # determine which system chat belongs to, and check for requirements
    chat = database.get('chats', ('id', message.chat.id))
    if chat and not system:
        system = chat['system']
    chat_configs = get_system_configs(system)
    requirements = chat_configs['commands'][command_type]
    # check if requirement for this command type is a rank or appointment
    if isinstance(requirements, list):  # Requirement is a list
        return rank_required(inputed,
                             person,
                             system,
                             requirements[0],
                             loud=loud)
    if isinstance(requirements, str):  # Requirement is a string
        return appointment_required(message,
                                    person,
                                    system,
                                    requirements,
                                    loud=loud)
    return False
Beispiel #21
0
def del_chat(message):
    """Removes chat from the system."""
    chat = message.chat.id
    database = Database()

    if database.get('chats', ('id', chat)):
        database.remove('chats', ('id', chat))
        reply(message, "Чат успешно удалён")
Beispiel #22
0
def appointment_required(message, person, system, appointment, loud=True):
    """Checks if person has appointment required for something"""
    database = Database()
    true_false = database.get("appointments", ('id', person.id),
                              ('appointment', appointment), ('system', system))
    if not true_false and loud:
        reply(message, "Вам для этого нужна должность {}".format(appointment))
    return true_false
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))
Beispiel #24
0
def update_all_members(message):
    """Updates all the messages, usernames and nicknames"""
    sent = reply(message, "Начинаю обновление...")
    database = Database(to_log=False)
    chat = database.get('chats', ('id', message.chat.id))
    system = chat['system']
    members = list(database.get_many('members', ('system', system)))
    system_update = SystemUpdate(message.chat.id, system, members, sent)
    system_update.start()
Beispiel #25
0
def get_one_language(message):
    """Analyzes the language that is suitable for some situation"""
    database = Database()
    entry = database.get('languages', ('id', message.chat.id))
    if entry:
        return entry['language']
    reply(
        message, "Если вы говорите на русском, напишите '/lang Русский'\n\n"
        "If you speak English, type '/lang English'\n\n")
    return ''
Beispiel #26
0
def set_money_name(message):
    """Change money's name in json"""
    database = Database()
    mode = ' '.join(message.text.split()[1:])
    chat = database.get('chats', ('id', message.chat.id))
    system = chat['system']
    if mode:
        update_systems_json(system, mode, 'money_name')
        reply(message, "OK!")
    else:
        reply(message, "После команды введите название валюты")
def chat_check(message):
    """Show which options are chosen in chat"""
    database = Database()
    database.change(message.chat.title, 'name', 'chats',
                    ('id', message.chat.id))
    if message.chat.username:
        database.change('public', 'type', 'chats', ('id', message.chat.id))
        database.change(message.chat.username, 'link', 'chats',
                        ('id', message.chat.id))
    else:
        database.change('private', 'type', 'chats', ('id', message.chat.id))
        database.change('None', 'link', 'chats', ('id', message.chat.id))
    # Здесь конец
    chat = database.get('chats', ('id', message.chat.id))
    system = database.get('systems', ('id', chat['system']))
    text = 'Настройки этого чата:\n\n'
    for feature in FEATURES:
        mark = ''
        microtext = ''
        system_property = system[feature]
        chat_property = chat[feature]
        if system_property:  # Feature is suggested
            if chat_property == 2:  # Feature is set default
                mark += '⚙'
                microtext += ' (по умолчанию)'
                chat_property = system_property - 1
            if chat_property:
                mark = '✅' + mark
                microtext = 'Работает' + microtext
            else:
                mark = '❌' + mark
                microtext = 'Не работает' + microtext
            text += f"{FEATURES_TEXTS['Russian'][FEATURES.index(feature)]}: \n{mark} {microtext}\n"
            if '⚙' in mark or '❌' in mark:
                text += f"/{feature}_on Включить на постоянку\n"
            if '⚙' in mark or '✅' in mark:
                text += f"/{feature}_off Выключить на постоянку\n"
            if '⚙' not in mark:
                text += f"/{feature}_default Поставить значение по умолчанию\n"
            text += '\n'
    reply(message, text)
Beispiel #28
0
def update_greetings_json(message, which_greeting: str):
    """Changes greetings in some system"""
    database = Database()
    data = cf.get_systems_json()
    system = database.get('chats', ('id', message.chat.id))['system']
    system_configs = data[system]
    text = cf.entities_saver(message.text, message.entities)
    text = ' '.join(text.split()[1:])
    system_configs['greetings'][which_greeting] = text
    data[system] = system_configs
    cf.write_systems_json(data)
    reply(message, 'Поставлен текст: "{}"'.format(text), parse_mode='HTML')
Beispiel #29
0
def day_set(message, day, language):
    """Set the day of person's birthday"""
    days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    database = Database()
    month = database.get('members', ('id', message.from_user.id))['month_birthday'] - 1
    if not month:
        reply(message, "Сначала поставь месяц рождения")
    elif day > days[month]:
        month = MONTHS_PREPOSITIONAL[month][language]
        reply(message, "В {} нет столько дней".format(month.lower()))
    else:
        reply(message, "Ставлю человеку с ID {} день рождения {}".format(message.from_user.id, day))
        database.change(day, 'day_birthday', 'members', ('id', message.from_user.id))
Beispiel #30
0
def in_mf(message, command_type, or_private=True, loud=True):
    """Позволяет регулировать использование команл вне чатов и в личке"""
    if message.chat.id > 0:  # is a private chat
        if loud and not or_private:
            reply(message, "Эта команда отключена в ЛС")
        return or_private

    database = Database()
    chat = database.get('chats', ('id', message.chat.id))
    if not chat:
        if loud:
            reply(message,
                  "Доброго времени суток! Перед тем как мной пользоваться, "
                  "ответьте мне на 1 вопрос: "
                  "Этот чат новый или связан с уже существующим чатом?",
                  reply_markup=ADD_CHAT_KEYBOARD)
        return False

    # Начинаем оруэлловщину
    person = left_new_or_else_member(message)
    system = chat['system']
    chat_configs = get_system_configs(system)
    get_person(message, person, system, database, system_configs=chat_configs)
    counter(message, person)
    # Заканчиваем оруэлловщину

    if command_type == 'financial_commands' and not chat_configs['money']:
        reply(message,
              "В этом чате система денег не включена. Смотрите /money_help")
        return False
    if command_type is None:
        return True
    if feature_is_available(message.chat.id, system, command_type):
        return True
    if loud and not database.get('systems', ('id', system), (command_type, 0)):
        reply(
            message, "В данном чате команды типа {} не поддерживаются. "
            "Проверьте /chat".format(command_type))
    return False