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)
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)
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)
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)
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)
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)
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)
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)
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')
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)
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)
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)
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, "Надо ответить на сообщение с актом преступления, чтобы переслать контекст\ в хранилище")
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, "Пожалуйста укажите номер системы после команды")
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)
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()
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)
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)
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)
def av_handler(call): """Обновляет адапт-голосовашку""" if call.chat_instance != "-8294084429973252853" or config_func.is_suitable( call, call.from_user, "advanced"): complicated_commands.adapt_vote(call)
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)
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)
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')
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)
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)
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)
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')
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)