async def process_successful_payment(message: types.Message, state: FSMContext): user = DataBaseFunc.get_user(message.from_user.id) data = await state.get_data() course = DataBaseFunc.get_course(user.course_id) DataBaseFunc.add_course_in_user(user, course) user.subscribe_end = False DataBaseFunc.commit() for channel in course.channels: try: await bot.unban_chat_member(chat_id=channel.channels.id, user_id=user.id) except: continue mess = await bot.send_message( message.chat.id, str(get_text(user, 'subscribe_menu_good_pay')).format( amount=course.cost, currency=message.successful_payment.currency, coursename=course.name)) mess2 = await bot.send_message(message.chat.id, get_text(user, 'start'), reply_markup=await UserGeneratorKeyboard.start_button(user)) await DataBaseFunc.delete_messages(user) ms = Message(user_id=user.id, message_id=mess.message_id) ms2 = Message(user_id=user.id, message_id=mess2.message_id) DataBaseFunc.add(ms) DataBaseFunc.add(ms2) await UserStateMainMenu.main_menu.set()
async def subscribe_continue_pay(callback: types.CallbackQuery, state: FSMContext): """Продлить подписку после её окончания""" await callback.answer() user = DataBaseFunc.get_user(callback.from_user.id) course = DataBaseFunc.get_course(user.course_id) timestamp = get_timestamp(user) PRICE = types.LabeledPrice(label=course.name, amount=int(f"{course.cost}00")) await state.update_data(last_course_id=user.course_id) mess = await bot.send_invoice( callback.message.chat.id, title=course.name, description=course.description, provider_token=TOKEN_SHOP_YANDEX, currency="rub", is_flexible=False, prices=[PRICE], start_parameter=f"course_id_{course.id}", payload=timestamp, # reply_markup=UserGeneratorKeyboard.course_back_in_list(user) # start_parameter = f"lol-lel-cheburek", # payload = "test-payload-check" ) await DataBaseFunc.delete_messages(user) ms = Message(user_id=user.id, message_id=mess.message_id) DataBaseFunc.add(ms)
def send_message_seven(user): text = "Добрый день. Ваша подписка на онлайн-курс Юланы Селивановой «Здоровая кожа» заканчивается через неделю. Успейте посмотреть все уроки, которые откладывали на потом. Когда подписка закончится ее можно будет возобновить через бота Telegram." data = {'chat_id': user.chat_id, 'text': text} answer = create_requets("POST", "sendMessage", data=data) message_id = json.loads(answer)['result']["message_id"] message = Message(user_id=user.id, message_id=message_id) DataBaseFunc.add(message)
def get_user_from_message(message: types.Message): """Возвращает пользователя из сообщения администратора""" if (message.forward_from): user = DataBaseFunc.get_user(message.forward_from.id) if (user == None): user = User(id=message.forward_from.id, username=message.forward_from.username, is_register=True, lng="Russian") DataBaseFunc.add(user) return user else: return DataBaseFunc.get_user(message.text)
def send_message(user): text = "У вас кончилась подписка, пожалуйста, продлите её, чтобы иметь доступ к каналам." text_button = "Продлить подписку" keyboard = json.dumps({ "inline_keyboard": [[{ "text": "Продлить подписку", "callback_data": "subscribe_continue_pay" }], [{ "text": "Связаться с менеджером", "callback_data": "continue_subs_manager", "url": "t.me/oxybes" }]] }) data = {'chat_id': user.chat_id, 'text': text, 'reply_markup': keyboard} answer = create_requets("POST", "sendMessage", data=data) message_id = json.loads(answer)['result']["message_id"] message = Message(user_id=user.id, message_id=message_id) DataBaseFunc.add(message)
async def start_message(message: types.Message): """Обработчик команды /start.""" user = DataBaseFunc.get_user(message.from_user.id) if user != None: if (user.chat_id != message.chat.id): user.chat_id = message.chat.id DataBaseFunc.commit() await message.delete() if user == None: user = User(id=message.from_user.id, username=message.from_user.username, chat_id=message.chat.id, is_check_seven_days=False) DataBaseFunc.add(user) DataBaseFunc.commit() mess = await message.answer( get_text(user, 'register'), reply_markup=UserGeneratorKeyboard.register_button(user)) await DataBaseFunc.delete_messages(user) ms = Message(user_id=user.id, message_id=mess.message_id) DataBaseFunc.add(ms) await UserStateRegister.main_menu.set() elif user.is_register == False: if (user.chat_id == None): user.chat_id = message.chat.id mess = await message.answer( get_text(user, 'register'), reply_markup=UserGeneratorKeyboard.register_button(user)) await DataBaseFunc.delete_messages(user) ms = Message(user_id=user.id, message_id=mess.message_id) DataBaseFunc.add(ms) await UserStateRegister.main_menu.set() else: if (user.chat_id == None): user.chat_id = message.chat.id mess = await message.answer(get_text(user, 'start'), reply_markup=await UserGeneratorKeyboard.start_button(user)) await DataBaseFunc.delete_messages(user) ms = Message(user_id=user.id, message_id=mess.message_id) DataBaseFunc.add(ms) await UserStateMainMenu.main_menu.set()