new version Bot in aiogram
3
.env
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
ADMIN_ID=776149633
|
||||||
|
BOT_TOKEN=1491703059:AAEIkkEyx9bB2WxmGdYA2bcXf7eu7h1h_cA
|
||||||
|
ip=localhost
|
|
@ -1,3 +0,0 @@
|
||||||
ADMIN_ID=12345678
|
|
||||||
BOT_TOKEN=123452345243:Asdfasdfasf
|
|
||||||
ip=localhost
|
|
13
app.py
|
@ -1,3 +1,7 @@
|
||||||
|
|
||||||
|
from loader import db
|
||||||
|
#from utils.set_bot_commands import set_default_commands
|
||||||
|
|
||||||
async def on_startup(dp):
|
async def on_startup(dp):
|
||||||
import filters
|
import filters
|
||||||
import middlewares
|
import middlewares
|
||||||
|
@ -5,9 +9,16 @@ async def on_startup(dp):
|
||||||
middlewares.setup(dp)
|
middlewares.setup(dp)
|
||||||
|
|
||||||
from utils.notify_admins import on_startup_notify
|
from utils.notify_admins import on_startup_notify
|
||||||
await on_startup_notify(dp)
|
try:
|
||||||
|
db.create_table_users()
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
db.delete_users()
|
||||||
|
|
||||||
|
|
||||||
|
await on_startup_notify(dp)
|
||||||
|
#await set_default_commands(dp)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from aiogram import executor
|
from aiogram import executor
|
||||||
from handlers import dp
|
from handlers import dp
|
||||||
|
|
BIN
data/main.db
Normal file
|
@ -1,5 +1,6 @@
|
||||||
from .help import dp
|
from .help import dp
|
||||||
from .start import dp
|
from .start import dp
|
||||||
|
from .body import dp
|
||||||
from .echo import dp
|
from .echo import dp
|
||||||
|
|
||||||
__all__ = ["dp"]
|
__all__ = ["dp"]
|
||||||
|
|
174
handlers/users/body.py
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
from aiogram.types import InputFile
|
||||||
|
from aiogram.utils.callback_data import CallbackData
|
||||||
|
from aiogram.dispatcher.filters import Command
|
||||||
|
from aiogram.dispatcher import FSMContext
|
||||||
|
from aiogram.types import Message, CallbackQuery
|
||||||
|
from aiogram.types import ContentType, Message
|
||||||
|
|
||||||
|
from photos import *
|
||||||
|
from photos.credit_image import *
|
||||||
|
from keyboards.inline.callback_buttom import *
|
||||||
|
|
||||||
|
from loader import dp, bot
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(text='🛸Поделиться с другом')
|
||||||
|
async def send_friends(message: Message):
|
||||||
|
await message.answer('Жми на "Поделиться ботом" 👇', reply_markup=send_bot)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(text="🏪Подобрать банк")
|
||||||
|
async def found_bank(message: Message):
|
||||||
|
photo = InputFile(path_or_bytesio="photos/loading1.jpg")
|
||||||
|
await bot.send_photo(chat_id=message.from_user.id, photo=photo, caption=(f"<i>Приступаю к поиску </i>"))
|
||||||
|
|
||||||
|
await asyncio.sleep(3)
|
||||||
|
|
||||||
|
photo1 = InputFile(path_or_bytesio="photos/loading2.jpg")
|
||||||
|
await bot.send_photo(chat_id=message.from_user.id, photo=photo1, caption=(f"<i><b>Поиск успешно выполнен!</b></i>\n"
|
||||||
|
f"<i>Мне было очень сложно найти банки с хорошими условиями</i>\n"
|
||||||
|
f"<i>которые могут продолжать свою работу во время кризиса! </i>\n"
|
||||||
|
f"<i>Поэтому если тебе нужны деньги срочно</i>\n"
|
||||||
|
f"<i>советую тебе заполнить анкеты во всех банках</i>"), reply_markup=show_search)
|
||||||
|
|
||||||
|
@dp.message_handler(text='👑Популяриные предложения')
|
||||||
|
async def popular_value(message: Message):
|
||||||
|
await message.answer("Выбери подходящее предложение👇🏻", reply_markup=popular_menu)
|
||||||
|
|
||||||
|
|
||||||
|
# ВНИЗУ БУДЕ КРЕДИТНЕ МЕНЮ
|
||||||
|
@dp.callback_query_handler(text="show_credit")
|
||||||
|
async def firs_catalog(call: CallbackQuery):
|
||||||
|
photo2 = InputFile(path_or_bytesio="photos/credit_image/Miloan.jpg")
|
||||||
|
await call.message.reply_photo(photo=photo2, caption=("<b>Miloan</b> - <i>При помощи нашего сервиса, каждый желающий</i>\n"
|
||||||
|
"<i>может получить кредит прямо на свою банковскую карту и </i>\n"
|
||||||
|
"<i>всего за 15 минут. Первый кредит бесплатно (под 0,01%). Сумма</i>\n"
|
||||||
|
"<i>первого займа – до 15000 гривен.</i>\n"
|
||||||
|
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||||
|
"<b>Условия:</b>\n"
|
||||||
|
"• Сумма займа: Первый займ – до 15000 гривен\n"
|
||||||
|
"• Срок займа: до 30 дней\n"
|
||||||
|
"• Скидки на повторные кредиты\n\n"
|
||||||
|
"<b>Требование к заёмщику:</b>\n"
|
||||||
|
"• Возраст: от 18 до 65 лет\n"
|
||||||
|
"• Гражданство Украины\n"
|
||||||
|
"• Наличие действующей банковской карты любого украинского банка\n"
|
||||||
|
"• Отсутствие просрочек по кредитам"
|
||||||
|
), reply_markup=first_klick)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="give_next")
|
||||||
|
async def second_catalog(call: CallbackQuery):
|
||||||
|
photo3 = InputFile(path_or_bytesio="photos/credit_image/bistro_dengi.jpg")
|
||||||
|
await call.message.reply_photo(photo=photo3, caption=("<b>ШвидкоГроші</b> - <i>лидер украинского рынка моментального</i>\n"
|
||||||
|
"<i>кредитования. Компания предоставляет моментальные </i>\n"
|
||||||
|
"<i>кредиты ОНЛАЙН и наличными до 5000 грн. без залога, справок и</i>\n"
|
||||||
|
"<i>поручителей.</i>\n"
|
||||||
|
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||||
|
"<b>Условия:</b>\n"
|
||||||
|
"• Сумма займа: от 600 до 10 000 грн.\n"
|
||||||
|
"• Для повторных клиентов - до 20 000 грн. под 1%\n"
|
||||||
|
"• Сроки пользования кредитом можно продлевать, при оплате процентов за пользование\n\n"
|
||||||
|
"<b>Требование к заёмщику:</b>\n"
|
||||||
|
"• Возраст: от 18 до 60 лет\n"
|
||||||
|
"• Гражданство Украины\n"
|
||||||
|
"• Наличие у клиента постоянного трудового дохода (может работать неофициально)"
|
||||||
|
), reply_markup=second_menu)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="next_variant")
|
||||||
|
async def gotovka_catalog(call: CallbackQuery):
|
||||||
|
photo3 = InputFile(path_or_bytesio="photos/credit_image/credit1.jpg")
|
||||||
|
await call.message.reply_photo(photo=photo3, caption=("<b>Ваша Готивочка</b> - <i>Главной составляющей системы </i>\n"
|
||||||
|
"<i>кредитования 'Ваша Готівочка' является удобство! </i>\n"
|
||||||
|
"<i>Мы предлагаем простые и понятные условия займа.</i>\n"
|
||||||
|
|
||||||
|
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||||
|
"<b>Условия:</b>\n"
|
||||||
|
"• Сумма займа: от 200 до 9000 грн.\n"
|
||||||
|
"• Время рассмотрения заявки – 15 мин.\n"
|
||||||
|
"• Без справки о доходах\n\n"
|
||||||
|
|
||||||
|
"<b>Преимущества.</b>\n"
|
||||||
|
"не просим клиента ксерокопию документов или фото документов\n"
|
||||||
|
"не просим клиента фото с паспортом или банковской картой\n"
|
||||||
|
"не просим клиента указывать аккаунт в социальной сети\n"
|
||||||
|
"не просим у клиента справку о доходах\n"
|
||||||
|
"не просим клиента телефон родственника\n\n"
|
||||||
|
|
||||||
|
"<b>Требование к заёмщику:</b>\n"
|
||||||
|
"• Возраст: от 18 до 60 лет\n"
|
||||||
|
"• Гражданство Украины\n"
|
||||||
|
"• наличие банковской карты (для перечисления кредитных средств) и мобильного телефона"
|
||||||
|
), reply_markup=there_menu)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="gotivochka3")
|
||||||
|
async def credit_plus(call: CallbackQuery):
|
||||||
|
photo3 = InputFile(path_or_bytesio="photos/credit_image/credit2.jpg")
|
||||||
|
await call.message.reply_photo(photo=photo3, caption=("<b>CreditPlus</b> - <i>Мы являемся обществом со 100% иностранным </i>\n"
|
||||||
|
"<i>капиталом. Благодаря этому ведем ответственный бизнес в</i>\n"
|
||||||
|
"<i>Украине, который включает набор обязательных целей и </i>\n"
|
||||||
|
"<i>гарантий для всех заинтересованных сторон.</i>\n"
|
||||||
|
"<a href='https://rozetka.com.ua'>Подробнее</a>👈\n\n"
|
||||||
|
"<b>Условия:</b>\n"
|
||||||
|
"• Сумма займа: до 15 000 грн.\n"
|
||||||
|
"• Время рассмотрения заявки – до 7 минут\n"
|
||||||
|
"• Без справки о доходах\n\n"
|
||||||
|
"<b>Требование к заёмщику:</b>\n"
|
||||||
|
"• Возраст: от 18 до 55 лет\n"
|
||||||
|
"• Гражданство Украины\n"
|
||||||
|
"• наличие банковской карты (для перечисления кредитных средств) и мобильного телефона"
|
||||||
|
), reply_markup=foo_menu)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="crediplus")
|
||||||
|
async def evro_groshi(call: CallbackData):
|
||||||
|
photo4 = InputFile(path_or_bytesio="photos/credit_image/evrogroshi.jpg")
|
||||||
|
await call.message.reply_photo(photo=photo4, caption=(
|
||||||
|
'<b>Eurogroshi</b> - <i>При помощи нашего сервиса, каждый желающий </i>\n'
|
||||||
|
'<i>может получить кредит прямо на свою банковскую карту и </i>\n'
|
||||||
|
'<i>всего за 15 минут</i>\n'
|
||||||
|
'<a href="https://rozetka.com.ua">Подробнее</a>👈\n\n'
|
||||||
|
'<b>Условия:</b>\n'
|
||||||
|
'• Сумма первого займа: до 4500 грн.\n'
|
||||||
|
'• Срок займа: до 30 дней\n'
|
||||||
|
'• Скидки на повторные кредиты\n\n'
|
||||||
|
"<b>Требование к заёмщику:</b>\n"
|
||||||
|
'• Возраст: от 18 лет\n'
|
||||||
|
'• Гражданство Украины\n'
|
||||||
|
'• Наличие действующей банковской карты любого украинского банка\n'
|
||||||
|
'• Отсутствие просрочек по кредитам\n'
|
||||||
|
), reply_markup=five_menu)
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="evrogroshi")
|
||||||
|
async def zecredit(call: CallbackData):
|
||||||
|
photo5 = InputFile(path_or_bytesio="photos/credit_image/zecreditor.jpg")
|
||||||
|
await call.message.reply_photo(photo=photo5, caption=(
|
||||||
|
'<b>Zecredit</b> - <i>это онлайн сервис благодаря которому наш клиент </i>\n'
|
||||||
|
'<i>может получить кредит всего за считанные минуты на </i>\n'
|
||||||
|
'<i>банковскую карту. Благодаря условиям конкуренции рынка т</i>\n' '<a href="https://rozetka.com.ua">Подробнее</a>👈\n\n'
|
||||||
|
'<i>нашей компанией была выбрана стратегия программы </i>\n'
|
||||||
|
'<i>лояльности для клиентов. Компания работает прозрачно, что </i>\n'
|
||||||
|
'<i>формирует доверие у основного сегмента рынка.</i>\n'
|
||||||
|
'<a href="https://rozetka.com.ua">Подробнее</a>👈\n\n'
|
||||||
|
'<b>Условия:</b>\n'
|
||||||
|
'• Сумма первого займа: до 3000 грн.\n'
|
||||||
|
'• Срок займа: до 30 дней\n'
|
||||||
|
'• Cервис работает круглосуточно, акция 1% на первый кредит\n\n'
|
||||||
|
"<b>Требование к заёмщику:</b>\n"
|
||||||
|
'• Возраст: от 18 лет\n'
|
||||||
|
'• Гражданство Украины\n'
|
||||||
|
'• Наличие действующей банковской карты любого украинского банка\n'
|
||||||
|
'• Отсутствие просрочек по кредитам\n'
|
||||||
|
), reply_markup=six_menu)
|
|
@ -1,9 +1,75 @@
|
||||||
from aiogram import types
|
from aiogram import types
|
||||||
|
from aiogram.types import ContentType, Message
|
||||||
|
|
||||||
|
from photos import *
|
||||||
|
from aiogram.types import InputFile
|
||||||
|
from keyboards.default.text_button import start_button, menu
|
||||||
|
|
||||||
|
from aiogram.dispatcher import FSMContext
|
||||||
|
from aiogram.dispatcher.filters import Command, Text
|
||||||
from aiogram.dispatcher.filters.builtin import CommandStart
|
from aiogram.dispatcher.filters.builtin import CommandStart
|
||||||
|
|
||||||
from loader import dp
|
from loader import dp, db, bot
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(CommandStart())
|
@dp.message_handler(CommandStart())
|
||||||
async def bot_start(message: types.Message):
|
async def bot_start(message: types.Message):
|
||||||
await message.answer(f'Привет, {message.from_user.full_name}!')
|
name = message.from_user.full_name
|
||||||
|
try:
|
||||||
|
db.add_user(id=message.from_user.id, name=name)
|
||||||
|
except sqlite3.IntegrityError as err:
|
||||||
|
print(err)
|
||||||
|
|
||||||
|
photo = InputFile(path_or_bytesio="photos/photo1.jpg")
|
||||||
|
await bot.send_photo(chat_id=message.from_user.id,
|
||||||
|
photo=photo,
|
||||||
|
caption=(f'Привет, {message.from_user.full_name}!\n\n'
|
||||||
|
f'Я твой финансовый бот-помошник 😊\n'
|
||||||
|
f'Я могу помочь тебе получить деньги на самых выгодных условиях под 0%!\n'
|
||||||
|
f'Для этого мне нужно задать пару вопросов.\n\n'
|
||||||
|
f'Жми на кнопку «Запустить»👇'), reply_markup=start_button)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(Command("data"))
|
||||||
|
async def database(message: types.Message):
|
||||||
|
count_users = db.count_users()[0]
|
||||||
|
await message.answer(
|
||||||
|
"\n".join([
|
||||||
|
f'Привет, {message.from_user.full_name}!',
|
||||||
|
'Ти есть в базе',
|
||||||
|
f'В базе <b>{count_users}</b> Пользователей',
|
||||||
|
])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(text="Запустить 🚀")
|
||||||
|
async def user_old(message: types.Message, state:FSMContext):
|
||||||
|
await message.answer(f"Сколько вам лет ?\n"
|
||||||
|
f"Напиши свой возраст...")
|
||||||
|
await state.set_state("years")
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(state="years")
|
||||||
|
async def enter_old(message: types.Message, state: FSMContext):
|
||||||
|
years = message.text
|
||||||
|
db.update_user_age(age=years, id=message.from_user.id)
|
||||||
|
|
||||||
|
photo = InputFile(path_or_bytesio='photos/photo2.jpg')
|
||||||
|
await bot.send_photo(chat_id=message.from_user.id,
|
||||||
|
photo=photo,
|
||||||
|
caption=(f'Благодарю тебя, {message.from_user.full_name}!\n'
|
||||||
|
f'Чтобы подобрать банк, который готов дать тебе деньги\n'
|
||||||
|
f'на самых лучших условиях\n'
|
||||||
|
f'воспользуйся кнопкой "🏪Подобрать банк"'
|
||||||
|
f'Тестови данние '), reply_markup=menu)
|
||||||
|
|
||||||
|
await state.finish()
|
||||||
|
|
||||||
|
@dp.message_handler(text="📝Мои настройки")
|
||||||
|
async def My_setting(message: Message):
|
||||||
|
user = db.select_user(id=message.from_user.id)
|
||||||
|
await message.answer(f"Страна: Україна\n"
|
||||||
|
f"Возраст: {user}")
|
||||||
|
|
||||||
|
|
0
handlers/users/update_db.py
Normal file
27
keyboards/default/text_button.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
|
||||||
|
|
||||||
|
start_button = ReplyKeyboardMarkup(
|
||||||
|
keyboard=[
|
||||||
|
[
|
||||||
|
KeyboardButton(text="Запустить 🚀")
|
||||||
|
],
|
||||||
|
],
|
||||||
|
resize_keyboard=True, one_time_keyboard=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
menu = ReplyKeyboardMarkup(
|
||||||
|
keyboard=[
|
||||||
|
[
|
||||||
|
KeyboardButton(text="🏪Подобрать банк"),
|
||||||
|
KeyboardButton(text="👑Популяриные предложения")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
KeyboardButton(text="📝Мои настройки")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
KeyboardButton(text="🛸Поделиться с другом")
|
||||||
|
]
|
||||||
|
],
|
||||||
|
resize_keyboard=True
|
||||||
|
)
|
112
keyboards/inline/callback_buttom.py
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||||
|
from aiogram.utils.callback_data import CallbackData
|
||||||
|
|
||||||
|
#Поделится с другом
|
||||||
|
send_bot = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Поделиться ботом👍🏼", switch_inline_query=f"\n"
|
||||||
|
f"https://t.me/money_zaim_bot\n"
|
||||||
|
f"Смотри какой крутой бот 😊")
|
||||||
|
]
|
||||||
|
])
|
||||||
|
|
||||||
|
show_search = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="🔍Показать результат поиска ", callback_data="show_credit")
|
||||||
|
]
|
||||||
|
])
|
||||||
|
|
||||||
|
popular_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Под 0%", callback_data="crediplus")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="С плохой кредитной историей", callback_data="gotivochka3")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Лучшие займы", callback_data="next_variant")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Все варианты", callback_data="give_next")
|
||||||
|
]
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
#______________________менюшка для кредитив____________---
|
||||||
|
|
||||||
|
first_klick = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="give_next")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
second_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Назад", callback_data="show_credit"),
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="next_variant")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
there_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Назад", callback_data="give_next"),
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="gotivochka3")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
foo_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Назад", callback_data="next_variant"),
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="crediplus")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
five_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Назад", callback_data="gotivochka3"),
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="evrogroshi")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
six_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Назад", callback_data="crediplus"),
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="zeccredit")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
seven_menu = InlineKeyboardMarkup(inline_keyboard=[
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Получить деньги", url="https://rozetka.com.ua/")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
InlineKeyboardButton(text="Назад", callback_data="crediplus"),
|
||||||
|
InlineKeyboardButton(text="Еще варианты", callback_data="done")
|
||||||
|
],
|
||||||
|
|
||||||
|
])
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
from aiogram import Bot, Dispatcher, types
|
from aiogram import Bot, Dispatcher, types
|
||||||
from aiogram.contrib.fsm_storage.memory import MemoryStorage
|
from aiogram.contrib.fsm_storage.memory import MemoryStorage
|
||||||
|
|
||||||
|
|
||||||
from data import config
|
from data import config
|
||||||
|
from utils.db_api.sqlite import Database
|
||||||
|
|
||||||
bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
|
bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
|
||||||
storage = MemoryStorage()
|
storage = MemoryStorage()
|
||||||
dp = Dispatcher(bot, storage=storage)
|
dp = Dispatcher(bot, storage=storage)
|
||||||
|
db = Database(path_to_db="data/main.db")
|
||||||
|
|
BIN
photos/credit_image/Miloan.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
photos/credit_image/bistro_dengi.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
photos/credit_image/credit1.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
photos/credit_image/credit2.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
photos/credit_image/evrogroshi.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
photos/credit_image/zecreditor.jpg
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
photos/loading1.jpg
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
photos/loading2.jpg
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
photos/photo1.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
photos/photo2.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
99
utils/db_api/sqlite.py
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
|
||||||
|
class Database:
|
||||||
|
def __init__(self, path_to_db="main.db"):
|
||||||
|
self.path_to_db = path_to_db
|
||||||
|
|
||||||
|
@property
|
||||||
|
def connection(self):
|
||||||
|
return sqlite3.connect(self.path_to_db)
|
||||||
|
|
||||||
|
def execute(self, sql: str, parameters: tuple = None, fetchone=False, fetchall=False, commit=False):
|
||||||
|
if not parameters:
|
||||||
|
parameters = ()
|
||||||
|
connection = self.connection
|
||||||
|
connection.set_trace_callback(logger)
|
||||||
|
cursor = connection.cursor()
|
||||||
|
data = None
|
||||||
|
cursor.execute(sql, parameters)
|
||||||
|
|
||||||
|
if commit:
|
||||||
|
connection.commit()
|
||||||
|
if fetchall:
|
||||||
|
data = cursor.fetchall()
|
||||||
|
if fetchone:
|
||||||
|
data = cursor.fetchone()
|
||||||
|
connection.close()
|
||||||
|
return data
|
||||||
|
|
||||||
|
def create_table_users(self):
|
||||||
|
sql = """
|
||||||
|
CREATE TABLE Users (
|
||||||
|
id int NOT NULL,
|
||||||
|
Name varchar(255) NOT NULL,
|
||||||
|
email varchar(255),
|
||||||
|
age varchar(50),
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
self.execute(sql, commit=True)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def format_args(sql, parameters: dict):
|
||||||
|
sql += " AND ".join([
|
||||||
|
f"{item} = ?" for item in parameters
|
||||||
|
])
|
||||||
|
return sql, tuple(parameters.values())
|
||||||
|
|
||||||
|
def add_user(self, id: int, name: str, email: str = None, age: str = None):
|
||||||
|
# SQL_EXAMPLE = "INSERT INTO Users(id, Name, email) VALUES(1, 'John', 'John@gmail.com')"
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
INSERT INTO Users(id, Name, email, age) VALUES(?, ?, ?, ?)
|
||||||
|
"""
|
||||||
|
self.execute(sql, parameters=(id, name, email, age), commit=True)
|
||||||
|
|
||||||
|
def select_all_users(self):
|
||||||
|
sql = """
|
||||||
|
SELECT * FROM Users
|
||||||
|
"""
|
||||||
|
return self.execute(sql, fetchall=True)
|
||||||
|
|
||||||
|
def select_user(self, **kwargs):
|
||||||
|
# SQL_EXAMPLE = "SELECT * FROM Users where id=1 AND Name='John'"
|
||||||
|
sql = "SELECT * FROM Users WHERE "
|
||||||
|
sql, parameters = self.format_args(sql, kwargs)
|
||||||
|
|
||||||
|
return self.execute(sql, parameters=parameters, fetchone=True)
|
||||||
|
|
||||||
|
|
||||||
|
def count_users(self):
|
||||||
|
return self.execute("SELECT COUNT(*) FROM Users;", fetchone=True)
|
||||||
|
|
||||||
|
def update_user_email(self, email, id):
|
||||||
|
# SQL_EXAMPLE = "UPDATE Users SET email=mail@gmail.com WHERE id=12345"
|
||||||
|
|
||||||
|
sql = f"""
|
||||||
|
UPDATE Users SET email=? WHERE id=?
|
||||||
|
"""
|
||||||
|
return self.execute(sql, parameters=(email, id), commit=True)
|
||||||
|
|
||||||
|
def update_user_age(self, age, id):
|
||||||
|
sql = f"""
|
||||||
|
UPDATE Users SET age=? WHERE id=?
|
||||||
|
"""
|
||||||
|
return self.execute(sql, parameters=(age, id), commit=True)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_users(self):
|
||||||
|
self.execute("DELETE FROM Users WHERE TRUE", commit=True)
|
||||||
|
|
||||||
|
|
||||||
|
def logger(statement):
|
||||||
|
print(f"""
|
||||||
|
_____________________________________________________
|
||||||
|
Executing:
|
||||||
|
{statement}
|
||||||
|
_____________________________________________________
|
||||||
|
""")
|
6
utils/db_api/test.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
from utils.db_api.sqlite import Database
|
||||||
|
|
||||||
|
db = Database()
|
||||||
|
|
||||||
|
def test():
|
||||||
|
|