async def stop_chat(message: types.Message, state: FSMContext): """Меняет status на '0' или 'False'. Также очищает partner_chatID. Как и в функции finding, возможно нужен вызов db.add_user""" partner_id = get_partner_id(message.from_user.id) if partner_id is None: await stop_searching_partner(message.from_user.id) await ActiveState.default.set() await message.answer(MESSAGES['stop_searching']) else: await ChatState.stop_chat_process.set() await message.answer(MESSAGES['sure_stop_chat'], parse_mode='html')
async def accept_stop(message: types.Message, state: FSMContext): if message.text.lower() == 'yep': partner_id = get_partner_id(message.from_user.id) await stop_room_chat(message.from_user.id, partner_id) banner = await get_tg_banner() ad = random.randint(1, 2) await ActiveState.default.set() await state.storage.set_state(user=partner_id, state=ActiveState.default.state) await message.answer(MESSAGES['stop_1'] + (('\n\n' + banner) if banner and ad == 1 else '')) await bot.send_message( partner_id, MESSAGES['stop_2'] + (('\n\n' + banner) if banner and ad == 1 else '')) else: await ChatState.default.set() await message.answer(MESSAGES['continue_chat'])
async def punishment_confirm(callback_query: types.CallbackQuery, state: FSMContext): """ Иммитация функции которая будет принимать ответ: что делать с пользователем Это callback-data который в себе принесёт: report_id, terms (срок бана) """ await callback_query.message.delete_reply_markup() data_type, msg_id, report_id, reason, term = callback_query.data.split('.') if data_type == 'pns': try: reason, user_id = await ban_user(report_id, 10) await state.storage.set_state(user=user_id, state=BanState.default.state) patner_id = get_partner_id(user_id) if patner_id: await state.storage.set_state(user=patner_id, state=ActiveState.default.state) await bot.send_message(partner_id, MESSAGES['stop_2']) logging.info( f' Disconnect: [ID:{user_id}] and [ID:{partner_id}]') await bot.edit_message_text(text='Пользователь был забанен', chat_id=callback_query.from_user.id, message_id=msg_id) await bot.send_message( user_id, f'Вам ограничено использование бота на {term} дней по причине: {reason}' ) except UserAlreadyBanned: await bot.send_message(callback_query.from_user.id, 'Пользователь уже находится в бане') except Exception as ex: logging.error( f'Error при попытке добавить пользователя в бан: {ex}') await bot.send_message(callback_query.from_user.id, 'Не удалось забанить пользователя') elif data_type == 'pnsnot': await bot.delete_message(callback_query.from_user.id, msg_id) await bot.send_message(callback_query.from_user.id, 'Наказание отменено')
async def report_callback_button(callback_query: types.CallbackQuery, state: FSMContext): await bot.answer_callback_query(callback_query.id) _, reason, report_id = callback_query.data.split('.') file_id = await send_report(report_id=report_id, reason=reason) user_id = callback_query.from_user.id # оставлю пока пересылку сообщения в бот await bot.send_voice(chat_id=-1001540464961, voice=file_id) await bot.send_message(user_id, MESSAGES['report_accepted']) await bot.delete_message(user_id, callback_query.message.message_id) partner_id = get_partner_id(user_id) log.info(f' Report: [ID:{user_id}] send report for user [ID:{partner_id}]') await stop_room_chat(user_id, partner_id) await ActiveState.default.set() await state.storage.set_state(user=partner_id, state=ActiveState.default.state) await bot.send_message(user_id, MESSAGES['stop_1']) await bot.send_message(partner_id, MESSAGES['stop_2'])
async def voice_messages_sender(message: types.voice): """Обработчик войсов, пересылка сообщения если чат установлен, и ответ, если чата нет""" partner_id = get_partner_id(message.from_user.id) await bot.send_voice(partner_id, message.voice.file_id)