diff --git a/app/keyboards.py b/app/keyboards.py index db90de0..53caf48 100644 --- a/app/keyboards.py +++ b/app/keyboards.py @@ -87,7 +87,7 @@ menu_2 = types.ReplyKeyboardMarkup( ) menu_2_2_inline_add = [ - [types.InlineKeyboardButton(text="Виды сотрудничества с СПбГЭТУ ЛЭТИ им Ульянова (Ленина)]", url=INFO_MESSAGES['link_menu_2_2'])], + [types.InlineKeyboardButton(text="Виды сотрудничества с СПбГЭТУ ЛЭТИ им Ульянова (Ленина)", url=INFO_MESSAGES['link_menu_2_2'])], ] menu_2_2_inline = types.InlineKeyboardMarkup(inline_keyboard=menu_2_2_inline_add) #---------------------------------------- diff --git a/app/messages.py b/app/messages.py index 9a97768..a2504d9 100644 --- a/app/messages.py +++ b/app/messages.py @@ -9,7 +9,7 @@ byebye_message = '✋ Я всегда рад помочь, обращайтес menu_1_message = 'Выберите интересующий вас раздел:' menu_2_message = 'Если вы хотите разместить вакансию или сотрудничать с нашим университетом, ознакомьтесь с информацией здесь:' -menu_3_message = 'Подпишись на наши каналы, чтобы не пропустить важные новости и обновления:' +menu_3_message = 'Центр развития карьеры "ЛЭТИ" - твой путь к работе мечты! 💫 Узнай первым о вакансиях, мероприятиях и наших интерактивах с подарками! 🎁\n\nПодпишись на наши каналы, чтобы не пропустить важные новости и обновления:' #menu_4_message = 'Подпишись на наши каналы, чтобы не пропустить важные новости и обновления:' menu_1_1_1_message = 'Всё о стажировках:' @@ -20,12 +20,19 @@ menu_1_1_message = 'Выберите, что вас интересует:' menu_1_2_message = 'Подготовь своё резюме правильно! Советы и инструкции доступны здесь:' menu_1_3_message = 'Для оформления договора на практику или стажировку воспользуйтесь этим инструментом:' -menu_2_1_message = """Станьте партнёром СПбГЭТУ ЛЭТИ и получите доступ к следующим возможностям:\n -- Управление вакансиями через интеграцию с hh.ru и "Работа в России".\n -- Автоматическая обработка откликов.\n -- Прямой доступ к студентам и выпускникам.\n -- Участие в событиях университета.\n""" -menu_2_2_message = 'Для обсуждения форматов сотрудничества пишите нам:\n\nsupport@facultetus.ru' +menu_2_1_message = """Станьте партнёром СПбГЭТУ ЛЭТИ и получите доступ к +следующим возможностям: + +- Управление вакансиями через интеграцию с +https://facultetus.ru/ + +- Автоматическая обработка откликов. + +- Прямой доступ к студентам и выпускникам. + +- Участие в карьерных событиях университета. +По вопросам пишите на почту: ck@etu.ru""" +menu_2_2_message = 'Для более подробного обсуждения форматов сотрудничества пишите нам:\nck@etu.ru' MESSAGES = { 'start': start_message, diff --git a/app/photos/2_1/1.jpg b/app/photos/2_1/1.jpg index 6882a2f..5509810 100644 Binary files a/app/photos/2_1/1.jpg and b/app/photos/2_1/1.jpg differ diff --git a/app/photos/2_2/1.jpg b/app/photos/2_2/1.jpg new file mode 100644 index 0000000..1356419 Binary files /dev/null and b/app/photos/2_2/1.jpg differ diff --git a/server.py b/server.py index ae99490..d412897 100644 --- a/server.py +++ b/server.py @@ -120,13 +120,13 @@ async def check_subscribe_spam(message_chat_id): # form #---------------------------------------- class Form(StatesGroup): - search_0 = State() - waiting_for_file = State() - waiting_for_file_pause = State() - register = State() - register_pause = State() + # search_0 = State() + # waiting_for_file = State() + # waiting_for_file_pause = State() + # register = State() + # register_pause = State() - prespam = State() + # prespam = State() spam = State() spam_pause = State() @@ -151,12 +151,12 @@ async def cancel_handler(message: Message, state: FSMContext) -> None: @dp.message(Command("start")) async def process_start_command(message: types.Message): - debug = True - if debug: - from debug import get_debug_info - debug_info = get_debug_info() - answer = "\n".join([f"{key}: {value}" for key, value in debug_info.items()]) - await message.answer(answer) + # debug = True + # if debug: + # from debug import get_debug_info + # debug_info = get_debug_info() + # answer = "\n".join([f"{key}: {value}" for key, value in debug_info.items()]) + # await message.answer(answer) checkAccess = await check_access(message) if checkAccess: @@ -171,25 +171,18 @@ async def do_main_menu(message: Message, state: FSMContext): checkAccess = await check_access(message) if not checkAccess: return await message.answer(MESSAGES['usestart']) - if txt == '/admin': - checkAdmin = await check_admin(message.chat.id) - if checkAdmin: + + checkAdmin = await check_admin(message.chat.id) + if checkAdmin: + if txt == '/admin': how_users = checkuser.log_info() answer = (f"Пользователей зарегистрировано: {how_users[0]}\n\n"\ f"Рассылка - /spam") return await message.reply(answer) - else: - return await message.answer(MESSAGES['usestart']) - - # elif txt == '/spam': - # checkAdmin = await check_admin(message.chat.id) - # if checkAdmin: - # answer = (f"Для кого рассылка?") - # await message.reply(answer, reply_markup=kb.spam) - # return await state.set_state(Form.prespam) - # else: - # return await message.answer(MESSAGES['usestart']) - + elif txt == '/spam': + answer = (f"Какой текст для рассылки?") + await message.reply(answer, reply_markup=kb.cancel) + return await state.set_state(Form.spam) # главное меню if txt == '🏠 Главная': return await message.answer(MESSAGES['start'], reply_markup=kb.main_menu) @@ -226,7 +219,9 @@ async def do_main_menu(message: Message, state: FSMContext): # return await bot.send_photo(message.from_user.id, photo, MESSAGES['menu_2_1']) #return await message.answer(MESSAGES['menu_2_1']) elif txt == '📄 Виды сотрудничества': - return await message.answer(MESSAGES['menu_2_2'], reply_markup=kb.menu_2_2_inline) + photo = FSInputFile('app/photos/2_2/1.jpg') # Используем FSInputFile для локального файла + return await bot.send_photo(message.from_user.id, photo, caption=MESSAGES['menu_2_2'], reply_markup=kb.menu_2_2_inline) + # return await message.answer(MESSAGES['menu_2_2'], reply_markup=kb.menu_2_2_inline) else: return await message.answer(MESSAGES['usestart']) # Для выведения ошибок @@ -237,6 +232,93 @@ async def do_main_menu(message: Message, state: FSMContext): print('----------------------------------------') #---------------------------------------- +# spam +#---------------------------------------- +# available_in_spam = ["Всем", "С доступом"] + +# @dp.message(lambda message: message.text not in available_in_spam, Form.prespam) +# async def process_invalid_prespam(message: types.Message, state: FSMContext): +# return await message.answer("Неверный аргумент. /cancel?", reply_markup=kb.spam) + +# @dp.message(Form.prespam, F.text) +# @router.message(Form.prespam) +# async def process_form_prespam(message: types.Message, state: FSMContext): + +# if message.text == "Всем": +# await state.update_data(prespam=1) +# elif message.text == "С доступом": +# await state.update_data(prespam=2) +# else: +# await state.clear() +# return + +# await state.set_state(Form.spam) +# await message.answer("Какой текст для рассылки?", reply_markup=kb.cancel) + +@dp.message(Form.spam, F.text) +@router.message(Form.spam) +async def process_form_spam(message: types.Message, state: FSMContext): + await state.update_data(spam=message.text) + data = await state.get_data() + # if data['prespam'] == 2: + # answer = f'Отправить сообщение (только с доступом):\n\n' + # else: + answer = f'Отправить сообщение (всем):\n\n' + answer += data['spam'] + await bot.send_message(message.from_user.id, answer, reply_markup=kb.da) + await state.set_state(Form.spam_pause) + await message.answer("Отправить?", reply_markup=kb.da) + +@dp.message(lambda message: message.text not in available_da, Form.spam_pause) +async def process_invalid_spam(message: types.Message, state: FSMContext): + return await message.answer("Отправить?\n\n Или /cancel ?", reply_markup=kb.da) + +@dp.message(Form.spam_pause, F.text) +@router.message(Form.spam_pause, F.text.in_(available_da)) +async def process_spam_pause(message: types.Message, state: FSMContext): + data = await state.get_data() + + chetchik_spam = 0 + checkAdmin = await check_admin(message.chat.id) + if checkAdmin: + # if data['prespam'] == 2: + # if DEBUG: + # print('Отправляем только с доступом:', data['spam']) + # user_for_spam = checkuser.load_all_users() + + # for s in user_for_spam: + # access = await check_subscribe_spam(s[1]) + # if access: # Проверяем наличие подписки + # try: + # text_spam = data['spam'] + # # Рассылка только пользователям с подпиской + # await bot.send_message(s[1], text_spam, parse_mode="HTML") + # chetchik_spam += 1 + # except Exception as e: + # if DEBUG: + # print(f"Ошибка отправки пользователю {s[1]}: {e}") + # pass + # else: + if DEBUG: + print('Отправляем всем:', data['spam']) + user_for_spam = (checkuser.load_all_users()) + + for s in user_for_spam: + try: + text_spam = data['spam'] + await bot.send_message(s[1], text_spam, parse_mode="HTML") + chetchik_spam = chetchik_spam + 1 + except: + if DEBUG: + print(f"Ошибка отправки пользователю {s[1]}: {e}") + pass + else: + pass + await state.clear() + user_info = checkuser.log_info() + await message.reply(f"Отправлено {chetchik_spam} из {user_info[0]}", reply_markup=kb.main_menu) + return +#---------------------------------------- if __name__ == '__main__': asyncio.run(main())