This commit is contained in:
diduchenkor 2020-12-14 13:36:17 +03:00 committed by GitHub
commit cfb6814046
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 510 additions and 6 deletions

3
.env Normal file
View File

@ -0,0 +1,3 @@
ADMIN_ID=776149633
BOT_TOKEN=1491703059:AAEIkkEyx9bB2WxmGdYA2bcXf7eu7h1h_cA
ip=localhost

View File

@ -1,3 +0,0 @@
ADMIN_ID=12345678
BOT_TOKEN=123452345243:Asdfasdfasf
ip=localhost

5
README.md Normal file
View File

@ -0,0 +1,5 @@
------------------------------
Телеграм бот
Помощ пользователям в получении кредита

13
app.py
View File

@ -1,3 +1,7 @@
from loader import db
#from utils.set_bot_commands import set_default_commands
async def on_startup(dp):
import filters
import middlewares
@ -5,9 +9,16 @@ async def on_startup(dp):
middlewares.setup(dp)
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__':
from aiogram import executor
from handlers import dp

BIN
data/main.db Normal file

Binary file not shown.

View File

@ -1,5 +1,6 @@
from .help import dp
from .start import dp
from .body import dp
from .echo import dp
__all__ = ["dp"]

174
handlers/users/body.py Normal file
View 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)

View File

@ -1,9 +1,75 @@
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 loader import dp
from loader import dp, db, bot
import sqlite3
@dp.message_handler(CommandStart())
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}")

View File

View 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
)

View 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")
],
])

View File

@ -1,8 +1,11 @@
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from data import config
from utils.db_api.sqlite import Database
bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
db = Database(path_to_db="data/main.db")

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
photos/loading1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
photos/loading2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
photos/photo1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
photos/photo2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

99
utils/db_api/sqlite.py Normal file
View 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
View File

@ -0,0 +1,6 @@
from utils.db_api.sqlite import Database
db = Database()
def test():