Advertisement
Guest User

Untitled

a guest
May 20th, 2022
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.45 KB | None | 0 0
  1. Main
  2. from aiogram.dispatcher import Dispatcher
  3. from aiogram.utils import executor
  4. import logging # ПРОСТО ВЫВОДИТ В КОНСОЛЬ ИНФОРМАЦИЮ, КОГДА БОТ ЗАПУСТИТСЯ
  5. from aiogram import types, Dispatcher
  6. from create_bot import dp, bot
  7. from aiogram.types import ReplyKeyboardMarkup, InlineKeyboardMarkup, ReplyKeyboardRemove
  8. import emoji
  9. from aiogram.dispatcher.filters import Text
  10. from aiogram.types import message
  11. from aiogram.dispatcher.filters import Command
  12. from aiogram import Bot, types
  13. from keyboards.keyboard import start1, btn1, btn2, btn3 ## ИМПОРТИРУЕМ ДАННЫЕ ИЗ ФАЙЛОВ keyboard.py
  14. from data_base import sqlite_db1 # первая база марафон
  15. from handlers import Partnerbase1
  16.  
  17. logging.basicConfig(format=u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s] %(message)s',
  18. level=logging.INFO,
  19. )
  20. async def on_startup(self):
  21. sqlite_db1.sql_start()
  22.  
  23. Partnerbase1.register_handlers_partnerbase1(dp)
  24.  
  25. @dp.message_handler(commands="start")
  26. async def commands_start(message: types.Message):
  27. await types.ChatActions.upload_photo()
  28. media = types.MediaGroup()
  29. media.attach_photo(types.InputFile('1.jpg'))
  30. await message.answer_media_group(media=media)
  31. keyboard = types.InlineKeyboardMarkup()
  32. keyboard.add(types.InlineKeyboardButton(text="Начинаем", callback_data="start1"))
  33. await message.answer('текст', reply_markup=keyboard)
  34.  
  35. @dp.callback_query_handler(text="start1")
  36. async def start_text2(call: types.Message):
  37. await types.ChatActions.upload_photo()
  38. media = types.MediaGroup()
  39. media.attach_photo(types.InputFile('2.jpg'))
  40. await call.message.answer_media_group(media=media)
  41. keyboard1 = types.InlineKeyboardMarkup()
  42. keyboard1.add(types.InlineKeyboardButton(text="Конечно", callback_data="start2"))
  43. await call.message.answer(F'текст', reply_markup=keyboard1)
  44.  
  45. @dp.callback_query_handler(text="start2")
  46. async def start_text2(call: types.Message):
  47. keyboard2 = types.InlineKeyboardMarkup()
  48. keyboard2.add(types.InlineKeyboardButton(text="ДА, Я ВИЖУ", callback_data="start3"))
  49. await call.message.answer('Отлично! 😉\n'
  50. 'текст\n'
  51. ,reply_markup=keyboard2)
  52.  
  53. @dp.callback_query_handler(text="start3")
  54. async def start_text2(call: types.Message):
  55. await call.message.answer(F'текст\n')
  56. await types.ChatActions.upload_photo()
  57. media = types.MediaGroup()
  58. media.attach_photo(types.InputFile('3.jpg'))
  59. await call.message.answer_media_group(media=media)
  60. await call.message.answer(F'текст', reply_markup=start1)
  61.  
  62. ==========
  63. keyboard
  64.  
  65. from aiogram import types
  66. from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
  67. import emoji
  68. ######################################################
  69.  
  70.  
  71. knopka1 = types.KeyboardButton('1') # ДОБАВЛЯЕМ КНОПКУ СЦЕНАРИИ
  72. knopka2 = types.KeyboardButton('Нет') # ДОБАВЛЯЕМ КНОПКУ СЦЕНАРИИ
  73. start1 = types.ReplyKeyboardMarkup(resize_keyboard=True) # СОЗДАЕМ ВООБЩЕ ОСНОВУ ДЛЯ КНОПОК
  74. start1.add(knopka1, knopka2) #ДОБАВЛЯЕМ ИХ В БОТА с учетом разрешенной ширины и вместимости в строке
  75.  
  76. ============
  77.  
  78. Handlers/Partnerbase1
  79.  
  80. from aiogram.dispatcher import FSMContext
  81. from aiogram.dispatcher.filters.state import State, StatesGroup
  82. from aiogram import types, Dispatcher
  83. from aiogram.types import ReplyKeyboardRemove
  84. import re
  85. from data_base import sqlite_db1
  86.  
  87. class FSMPartnerbase1(StatesGroup):
  88. name = State()# Начало ввода почты
  89.  
  90. # @dp.message_handler(content_types=['text'], text='1', state=None)
  91. async def cm_start(message: types.Message):
  92. await FSMPartnerbase1.name.set()
  93. await message.answer('🤖<b>'+message.from_user.first_name+'</b>, пожалуйста, укажите Вашу правильную почту. Она нужна для корректной работы с Вами❗️')
  94. print("FSM запущена")
  95.  
  96. # Ловим ответ и пишем в словарь
  97. # @dp.message_handler(state=FSMPartnerbase1.name) #временно для понимания
  98. async def get_email(message: types.Message, state: FSMContext):
  99.  
  100. async with state.proxy() as data:
  101. data['user_id'] = message.from_user.id #то есть получить от usera его ID
  102. user_id = message.from_user.id
  103. await state.update_data(
  104. {'user_id': user_id}
  105. )
  106. data['username'] = message.from_user.username
  107. username = message.from_user.username
  108. await state.update_data(
  109. {'username': username}
  110. )
  111. data['name'] = message.text
  112. name = message.text
  113. await state.update_data(
  114. {'name': name}
  115. )
  116.  
  117. regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
  118.  
  119. if re.fullmatch(regex, name):
  120. print("Valid email")
  121.  
  122. await sqlite_db1.sql_add_command(state)
  123. await state.finish()
  124. else:
  125. await message.answer('🤖<b>'+message.from_user.first_name+',</b> пожалуйста, введите правильную электронную почту. Она необходима для дальнейшей работы с Вами❗️')
  126. print("Invalid email")
  127.  
  128. def register_handlers_partnerbase1(dp: Dispatcher):
  129. dp.register_message_handler(cm_start, content_types=['text'], text='1', state=None)
  130. dp.register_message_handler(get_email, state=FSMPartnerbase1.name)
  131.  
  132. ============
  133. sqlite_db1
  134.  
  135. import sqlite3
  136.  
  137. db = sqlite3.connect('data_base/db.db')
  138. sql = db.cursor()
  139. if db:
  140. print('Подключился к БД1')
  141. sql.execute('CREATE TABLE IF NOT EXISTS partners1(user_id INTEGER, username STRING, e_mail STRING)')
  142.  
  143. db.commit()
  144.  
  145. async def sql_add_command(state):
  146.  
  147. async with state.proxy() as data:
  148.  
  149. sql.execute('INSERT INTO partners1 VALUES (?, ?, ?)', tuple(data.values()))
  150.  
  151. db.commit()
  152.  
  153.  
  154. При запуске ошибок не дает.
  155. база данных создается.
  156. но при нажатии кнопки 1 не появляется сообщение о введении почты и не понятно срабатывает ли FSM
  157.  
  158.  
  159.  
  160.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement