Exemplo n.º 1
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')
Exemplo n.º 2
0
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')
Exemplo n.º 3
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()