예제 #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, "Ничего нет!")
예제 #2
0
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, "Ничего нет!")
예제 #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()