示例#1
0
def admins_handler(message):
    """Ping admins"""
    if config_func.in_mf(message, command_type=None) and config_func.is_suitable(message,
                                                                                 message.from_user,
                                                                                 "standard") \
            and config_func.cooldown(message, 'admins', 300):
        standard_commands.admins(message)
示例#2
0
def kick_handler(message):
    """ Kicks member """
    if config_func.in_mf(message, 'boss_commands', or_private=False) and config_func.is_suitable(
            message, message.from_user, 'boss'):
        person = config_func.Analyzer(message, value_necessary=False).return_target_person()
        if person and config_func.rank_superiority(message, person):
            boss_commands.ban(message, person, unban_then=True)
示例#3
0
def rank_changer_handler(message):
    """Changes person's rank"""
    if config_func.in_mf(message, command_type=None, or_private=False):
        if config_func.is_suitable(message, message.from_user, 'uber'):
            person = config_func.Analyzer(message, value_necessary=False).return_target_person(to_self=True)
            if person:
                if person.id == message.from_user.id or config_func.rank_superiority(message, person):
                    boss_commands.rank_changer(message, person)
示例#4
0
def unwarn_handler(message):
    """Снимает с участника предупреждение"""
    if config_func.in_mf(message, 'boss_commands', or_private=False) and config_func.is_suitable(
            message, message.from_user, 'boss'):
        analyzer = config_func.Analyzer(message, default_value=1, value_positive=True)
        person = analyzer.return_target_person()
        if person:
            boss_commands.unwarn(message, person, analyzer.parameters_dictionary)
示例#5
0
def set_limit_handler(message):
    """Sets the limit for entering the chat"""
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        analyzer = config_func.Analyzer(message)
        parameters_dictionary = analyzer.parameters_dictionary
        if parameters_dictionary:
            boss_commands.set_limit(message, parameters_dictionary)
示例#6
0
def messages_change_handler(message):
    """Меняет запись в БД о количестве сообщений чела"""
    if config_func.in_mf(message, 'boss_commands', or_private=False) and config_func.is_suitable(
            message, message.from_user, "boss"):
        analyzer = config_func.Analyzer(message, value_positive=True)
        person = analyzer.return_target_person(to_self=True)
        parameters_dictionary = analyzer.parameters_dictionary
        if person and parameters_dictionary:
            boss_commands.message_change(message, person, parameters_dictionary)
示例#7
0
def money_pay_handler(message):
    """ Give money from the treasury to the member """
    if config_func.in_mf(message, 'financial_commands', or_private=False) \
            and config_func.is_suitable(message, message.from_user, 'boss'):
        analyzer = config_func.Analyzer(message)
        person = analyzer.return_target_person(to_self=True)
        parameters_dictionary = analyzer.parameters_dictionary
        if person and parameters_dictionary:
            boss_commands.money_pay(message, person, parameters_dictionary)
示例#8
0
def mute_handler(message):
    """ Mutes member """
    if config_func.in_mf(message, "boss_commands", or_private=False) and config_func.is_suitable(
            message, message.from_user, 'boss'):
        analyzer = config_func.Analyzer(message, default_value=1, value_positive=True)
        person = analyzer.return_target_person()
        parameters_dictionary = analyzer.parameters_dictionary
        if person and config_func.rank_superiority(message, person) and parameters_dictionary:
            boss_commands.mute(message, person, parameters_dictionary)
示例#9
0
def all_members_handler(message):
    """Присылает человеку все записи в БД"""
    if config_func.in_mf(message, command_type=None, or_private=False):
        language = config_func.get_one_language(message)
        if language:
            if config_func.is_suitable(message, message.from_user, 'boss', loud=False):
                standard_commands.send_some_top(message, language,
                                                '{index}. <code>{id}</code> {p_link}\n')
            else:
                standard_commands.send_some_top(message, language,
                                                '{index}. <code>{id}</code> {nickname}\n')
示例#10
0
def money_top_handler(message):
    """Топ ЯМ"""
    if config_func.in_mf(message, 'financial_commands', or_private=False):
        language = config_func.get_one_language(message)
        if language:
            args = message, language, '{index}. {p_link} — {money} {m_emo}\n'
            kwargs = {'start': 'Бюджет: {bot_money} {m_emo}\n\n', 'sort_key': lambda x: x['money']}
            if config_func.is_suitable(message, message.from_user, 'boss', loud=False):
                standard_commands.send_some_top(*args, **kwargs)
            else:
                standard_commands.send_short_top(*args, **kwargs)
示例#11
0
def messages_top_handler(message):
    """Messages top"""
    if config_func.in_mf(message, command_type=None, or_private=False):
        language = config_func.get_one_language(message)
        if language:
            args = message, language, '{index}. {p_link} — {messages} сообщ.\n'
            kwargs = {'sort_key': lambda x: x['messages']}
            if config_func.is_suitable(message, message.from_user, 'boss', loud=False):
                standard_commands.send_some_top(*args, **kwargs)
            else:
                standard_commands.send_short_top(*args, **kwargs)
示例#12
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)
示例#13
0
def warn_handler(message):
    """Даёт участнику предупреждение"""
    if config_func.in_mf(message, 'boss_commands', or_private=False) and config_func.is_suitable(
            message, message.from_user, 'boss'):
        rep = message.reply_to_message
        if rep:
            analyzer = config_func.Analyzer(message, default_value=1, value_positive=True)
            parameters_dictionary = analyzer.parameters_dictionary
            if analyzer.check_person(rep.from_user, False, False) \
                    and config_func.rank_superiority(message, rep.from_user):
                if parameters_dictionary:
                    boss_commands.warn(message, rep.from_user, parameters_dictionary)
        else:
            output.reply(
                message, "Надо ответить на сообщение с актом преступления, чтобы переслать контекст\
                          в хранилище")
示例#14
0
def add_chat(message):
    """Добавляет чат в базу данных чатов, входящих в систему МФ2"""
    database = Database()
    system = None
    message_words = message.text.split()
    if len(message_words) == 2:
        system = message_words[-1]
    chat_type, link = cf.get_chat_type_and_chat_link(message.chat)
    if database.get('chats', ('id', message.chat.id)):
        reply(message, "Этот чат уже записан")
    elif system:  # system is specified
        if database.get('systems',
                        ('id', system)):  # Adding new chat to existing system
            if database.get('members', ('id', message.from_user.id),
                            ('system', system)):
                if is_suitable(message,
                               message.from_user,
                               "chat_changer",
                               system=system):
                    create_chat(message, system, chat_type, link, database)
                    reply(
                        message, "Теперь я здесь работаю! "
                        "Вы можете менять настройки по умолчанию в /system, "
                        "так что чтобы поменять настройки везде, вам не надо "
                        "в каждом чате лезть в /chat")
                else:
                    reply(
                        message,
                        "У вас в этой системе нет полномочий для добавления чатов в неё)"
                    )
            else:
                reply(message, "Произошла ошибка!")
        else:
            reply(message, "Такой системы не существует")
    else:
        reply(message, "Пожалуйста укажите номер системы после команды")
示例#15
0
def add_admin_place_handler(message):
    """Add admin place to system"""
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.add_admin_place(message)
示例#16
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()
示例#17
0
def update_all_members_handler(message):
    """ Updates members database """
    if config_func.in_mf(message, 'boss_commands', or_private=False) and config_func.is_suitable(
            message, message.from_user, 'boss'):
        boss_commands.update_all_members(message)
示例#18
0
def language_getter_handler(message):
    """Gets the language of the chat"""
    if config_func.in_mf(message, command_type=None, or_private=True):
        if message.chat.id > 0 or config_func.is_suitable(message, message.from_user, 'boss'):
            boss_commands.language_setter(message)
示例#19
0
def add_vote_handler(call):
    """Вставляет голос в голосоовашку"""
    if call.chat_instance != "-8294084429973252853" or config_func.is_suitable(
            call, call.from_user, "advanced"):
        complicated_commands.add_vote(call)
示例#20
0
def av_handler(call):
    """Обновляет адапт-голосовашку"""
    if call.chat_instance != "-8294084429973252853" or config_func.is_suitable(
            call, call.from_user, "advanced"):
        complicated_commands.adapt_vote(call)
示例#21
0
def insult_handler(message):
    """Спращивает, иронично ли признание оскорблением"""
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "standard"):
        complicated_commands.insult(message)
示例#22
0
def system_options_handler(message):
    """ Change chat system options """
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.system_options(message)
示例#23
0
def update_full_admin_greetings_handler(message):
    """ Change full admin's greeting """
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.update_greetings_json(message, 'full_admin')
示例#24
0
def money_name_handler(message):
    """ Set currency name """
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.set_money_name(message)
示例#25
0
def money_emoji_handler(message):
    """ Put emoji to indicate the amount of currency """
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.money_emoji(message)
示例#26
0
def money_reset_handler(message):
    """Take all users' money to a system fund"""
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.money_reset(message)
示例#27
0
def del_chat_handler(message):
    """Removes chat from the system."""
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.del_chat(message)
def helper(message):
    """Предоставляет человеку список команд"""
    LOG.log(str(message.from_user.id) + ": helper invoked")
    database = Database()
    answer = '<b>Команды:</b>\n\n'
    if message.chat.id < 0:  # Command is used in chat
        system = database.get('chats', ('id', message.chat.id))['system']
        answer += '<b>Общие команды:</b>\n' \
                  '/me - Присылает вашу запись в базе данных\n' \
                  '/anon - Прислать анонимное послание в админский чат (если таковой имеется)\n' \
                  '/members - Прислать в личку перечень участников (нынешних и бывших) и их ID\n' \
                  '/messages_top - Прислать в личку топ участников по сообщениям\n' \
                  '/warns - Посмотреть, у кого сколько предупреждений\n\n'
        # Helps
        answer += '<b>Помощь и менюшки:</b>\n'
        answer += '/help - Прислать это сообщение\n'\
                  '/money_help - Финансовый режим\n'\
                  '/chat - Показать настройки в чате\n'
        if len(database.get_many(
                'chats',
            ("system", system))) > 1:  # More than 1 chat in system
            answer += '/system - Показать настройки во всей системе (по умолчанию)\n'
        answer += '\n<b>Хранилище:</b>\n'\
                  '/storages - Посмотреть список хранилищ\n'\
                  '/get [хранилище] [номер] - Получать контент из хранилища,' \
                  'если номер не указан, будет прислан случайный контент из хранилища\n'\
                  '/size [хранилище] - Получить инфо о количестве контента и модеров хранилища\n\n'
        if feature_is_available(message.chat.id, system, 'standard_commands'):
            answer += '<b>Развлекательные команды:</b>\n'
            answer += '/minet - Делает приятно\n'
            answer += '/meme - Присылает мем\n'
            answer += '/shuffle [x] [элементы через пробел] - перемешать элементы. ' \
                      'Число x необязательно, но если указано, ' \
                      'то бот оставит только x первых элементов\n\n'
        if is_suitable(message, message.from_user, 'boss', loud=False):
            answer += '<b>Базовые админские команды:</b>\n'
            answer += '/update - Пересчитывает сообщения, ' \
                      'никнеймы и юзернеймы всех участников чата\n'
            answer += '/messages [число сообщений] - ' \
                      'Изменить количество сообщений от участника в этом чате\n'
            answer += '/warn [число варнов]- Дать варн(ы) (3 варна = бан)\n'
            answer += '/unwarn [число варнов]- Снять варн(ы)\n'
            answer += '/mute [количество часов] - Запретить писать в чат\n'
            answer += '/ban - Дать бан\n'
            answer += '/kick - Кикнуть (то есть чел сразу сможет вернуться)\n'
            answer += '/guest - Снять ограничения, забрать админку\n\n'
        if is_suitable(message, message.from_user, 'uber', loud=False):
            answer += '<b>Продвинутые админские команды:</b>\n'
            answer += '/admin - Снять ограничения, дать админку\n'
            answer += '/senior_admin - Снять бан, дать продвинутую админку\n\n'
        if is_suitable(message, message.from_user, 'chat_changer', loud=False):
            answer += '<b>Настройщики чатов:</b>\n'
            answer += '/add_chat [ID системы чатов] - Добавить чат в систему чатов\n' \
                      '/set_limit [x] - Поставить кулдаун на вход. Когда кто-то заходит, ' \
                      'следующие x секунд никто не сможет зайти\n'
            answer += '/admin_place - Отметить чат как админский\n'
            answer += '/standard_greetings [текст] — Изменить приветствие для простого человека\n' \
                      '/captcha_greetings [текст] — Изменить приветствие при капче\n' \
                      '/admin_greetings [текст] — Изменить приветствие для админа\n' \
                      '/full_greetings [текст] — Изменить приветствие для полного админа\n' \
                      "<i>Вставьте в текст '{name}' без кавычек там, " \
                      "где нужно обратиться к участнику по нику</i>\n\n"

        answer += "<b>Примечание:</b> " \
                  "командами типа /me можно отвечать на сообщения других людей, " \
                  "тогда команда выполнится на выбранном человеке. " \
                  "Ещё вы можете после команды написать ID человека (можно достать " \
                  "в /members), чтобы не отвлекать его от дел :3\n\n"
        answer += f'<b><i>ID вашей системы: {system} </i></b>'
    else:  # Command is used in PM
        answer += '/help - Прислать это сообщение\n'
        answer += '/minet - Делает приятно\n'
        answer += '/drakken - Присылает арт с Доктором Драккеном\n'
        answer += '/meme - Присылает мем\n'
        answer += '/art - Присылает картину\n'
        answer += '/storages - Посмотреть список хранилищ\n'
        answer += '/get [хранилище] - Получать случайный контент из хранилища\n'
        answer += '/size [хранилище] - Получить инфо о количестве контента и модеров хранилища\n'
        answer += '/shuffle [x] [элементы через пробел] - перемешать элементы. ' \
                  'Число x необязательно, но если указано, ' \
                  'то бот оставит только x первых элементов\n\n'
        answer += 'В чате мой функционал значительно шире'

    reply(message, answer, parse_mode='HTML')
示例#29
0
def money_mode_change_handler(message):
    """ Enable or disable money system """
    if config_func.in_mf(message, command_type=None, or_private=False) and config_func.is_suitable(
            message, message.from_user, "chat_changer"):
        boss_commands.money_mode_change(message)