add spam
This commit is contained in:
		
							parent
							
								
									b973e430cf
								
							
						
					
					
						commit
						1fd9b3a6f3
					
				@ -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)
 | 
			
		||||
#----------------------------------------
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 142 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/photos/2_2/1.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								app/photos/2_2/1.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 197 KiB  | 
							
								
								
									
										138
									
								
								server.py
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								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())
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user