Skip to content
This repository has been archived by the owner on Feb 27, 2025. It is now read-only.

Commit

Permalink
Changed paying system - now payment_id is 100% uniqe.
Browse files Browse the repository at this point in the history
Optimized database.
  • Loading branch information
schr1k committed May 5, 2023
1 parent 281200c commit ce92b14
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 56 deletions.
6 changes: 3 additions & 3 deletions create_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
try:
connection = sqlite3.connect("db.db")
connection.execute(
"create table users (id integer primary key autoincrement, state varchar(20), name varchar(20), age varchar(3), sex varchar(10), country varchar(20), city varchar(20), op_sex varchar(10), tg_username varchar(20), tg_id varchar(25), tg_first_name varchar(20), tg_second_name varchar(20), connect_with varchar(20), last_connect varchar(20), chats int default 0, messages int default 0, likes int default 0, dislikes int default 0, vip_ends varchar(30), refs int default 0, points int default 0, notifications int default 1)")
connection.execute("create table all_messages (sender varchar(20), message varchar(30))")
connection.execute("create table queue (tg_id varchar(15), sex varchar(6), op_sex varchar(6))")
"create table users (`id` integer primary key autoincrement, `state` varchar(20), `name` varchar(20), `age` varchar(3), `sex` varchar(10), `country` varchar(20), `city` varchar(20), `op_sex` varchar(10), `tg_id` varchar(25), `connect_with` varchar(20), `last_connect` varchar(20), `chats` int default 0, `messages` int default 0, `likes` int default 0, `dislikes` int default 0, `vip_ends` varchar(30), `refs` int default 0, `points` int default 0, `notifications` int default 1, `order_id` int default 0)")
connection.execute("create table all_messages (`sender` varchar(20), `message` varchar(30))")
connection.execute("create table queue (`tg_id` varchar(15), `sex` varchar(6), `op_sex` varchar(6))")
except Exception as e:
print(e)
25 changes: 19 additions & 6 deletions db.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,12 @@ def user_exists(self, tg_id: str | int) -> bool:
(tg_id,)).fetchall()
return bool(len(result))

def new_user(self, name: str, age: str, sex: str, country: str, city: str, tg_username: str, tg_id: str | int,
tg_first_name: str, tg_second_name: str):
def new_user(self, name: str, age: str, sex: str, country: str, city: str, tg_id: str | int):
with self.connection:
result = self.cursor.execute(
"INSERT INTO `users` (`name`, `age`, `sex`, `country`, `city`,"
"`tg_username`, `tg_id`, `tg_first_name`, `tg_second_name`)"
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)",
(name, age, sex, country, city, tg_username, tg_id, tg_first_name, tg_second_name)
"INSERT INTO `users` (`name`, `age`, `sex`, `country`, `city`, `tg_id`)"
"VALUES(?, ?, ?, ?, ?, ?)",
(name, age, sex, country, city, tg_id)
)
return result

Expand Down Expand Up @@ -207,6 +205,14 @@ def get_points(self, tg_id: str | int):
).fetchone()
return result

def get_order_id(self, tg_id: str | int):
with self.connection:
result = self.cursor.execute(
"SELECT `order_id` FROM `users` WHERE `tg_id` = ?",
(tg_id,)
).fetchone()
return result

def search(self, tg_id: str | int) -> str | int:
with self.connection:
res = self.cursor.execute(
Expand Down Expand Up @@ -340,6 +346,13 @@ def edit_points(self, value: int, tg_id: str | int):
(value, tg_id)
)

def edit_order_id(self, value: int, tg_id: str | int):
with self.connection:
self.cursor.execute(
"UPDATE `users` SET `order_id` = `order_id` + ? WHERE `tg_id` = ?",
(value, tg_id)
)

def save_last_connect(self, tg_id: str | int):
with self.connection:
self.cursor.execute(
Expand Down
105 changes: 58 additions & 47 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,29 +77,29 @@ async def help(message):
@dp.message_handler(commands=['registrate'])
async def registrate(message):
if not db.user_exists(message.from_user.id):
await message.answer("Введите ваше имя")
await message.answer("Введите ваше имя.")
await RegState.name.set()


@dp.message_handler(state=RegState.name)
async def set_name(message, state: FSMContext):
await state.update_data(name=message.text)
await message.answer("Теперь введите ваш пол (М/Ж)")
await message.answer("Теперь введите ваш пол (М/Ж).")
await RegState.sex.set()


@dp.message_handler(state=RegState.sex)
async def set_sex(message, state: FSMContext):
if message.text == 'м' or message.text == 'М':
await state.update_data(sex='male')
await message.answer("Теперь введите ваш возраст")
await message.answer("Теперь введите ваш возраст.")
await RegState.age.set()
elif message.text == 'ж' or message.text == 'Ж':
await state.update_data(sex='female')
await message.answer("Теперь введите ваш возраст")
await message.answer("Теперь введите ваш возраст.")
await RegState.age.set()
else:
await message.reply("Вы ввели некорректное значение, повторите ввод")
await message.reply("Вы ввели некорректное значение, повторите ввод.")


@dp.message_handler(state=RegState.age)
Expand All @@ -125,9 +125,7 @@ async def set_city(message, state: FSMContext):
await message.answer("Спасибо за регистрацию! Теперь вам доступен поиск - /search.",
reply_markup=kb.main_kb)
data = await state.get_data()
db.new_user(data['name'], data['age'], data['sex'], data['country'], data['city'],
message.from_user.username, message.from_user.id,
message.from_user.first_name, message.from_user.last_name)
db.new_user(data['name'], data['age'], data['sex'], data['country'], data['city'], message.from_user.id)
await state.finish()
if db.get_vip_ends(message.from_user.id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=7)).strftime('%d.%m.%Y %H:%M'),
Expand Down Expand Up @@ -487,20 +485,24 @@ async def buy_vip(message):
@dp.message_handler(lambda message: message.text == '👑 Вип на день - 20₽')
async def buy_day(message):
try:
transactions = [dict(i) for i in list(await pay.get_transactions())]
payment_id = int(transactions[0]['payment_id'])
payments = await pay.create_pay(amount=20, currency='RUB', success_url=config.RETURN_URL,
desc=str(payment_id + 1), payment=payment_id + 1)
c = 0
tg_id = message.from_user.id
db.edit_order_id(1, tg_id)
payment_id = f'{tg_id}-{int(db.get_order_id(tg_id)[0]) + 1}'
payments = await pay.create_pay(amount=20, currency='RUB', success_url=config.RETURN_URL, desc=payment_id,
payment=payment_id)
await message.answer(f'<a href="{payments}">Оплатить 20 рублей</a>', parse_mode='HTML')
flag1 = False
while not flag1:
for i in transactions:
if i['payment_id'] == payment_id + 1:
for i in [dict(i) for i in list(await pay.get_transactions())]:
if i['payment_id'] == payment_id:
if c >= 3600:
flag1 = True
break
if i['transaction_status'] == 1:
await message.answer('Успешно')
if db.get_vip_ends(message.from_user.id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=1)).strftime('%d.%m.%Y %H:%M'),
message.from_user.id)
if db.get_vip_ends(tg_id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=1)).strftime('%d.%m.%Y %H:%M'), tg_id)
else:
db.edit_vip_ends(
(datetime.strptime(db.get_vip_ends(message.from_user.id)[0], '%d.%m.%Y %H:%M') +
Expand All @@ -509,75 +511,84 @@ async def buy_day(message):
break
else:
await asyncio.sleep(3)
c += 3
else:
await asyncio.sleep(3)
c += 3
except Exception as e:
warning_log.warning(e)


@dp.message_handler(lambda message: message.text == '👑 Вип на неделю - 100₽')
async def buy_week(message):
try:
transactions = [dict(i) for i in list(await pay.get_transactions())]
payment_id = int(transactions[0]['payment_id'])
payments = await pay.create_pay(amount=100, currency='RUB', success_url=config.RETURN_URL,
desc=str(payment_id + 1), payment=payment_id + 1)
c = 0
tg_id = message.from_user.id
db.edit_order_id(1, tg_id)
payment_id = f'{tg_id}-{int(db.get_order_id(tg_id)[0]) + 1}'
payments = await pay.create_pay(amount=100, currency='RUB', success_url=config.RETURN_URL, desc=payment_id,
payment=payment_id)
await message.answer(f'<a href="{payments}">Оплатить 100 рублей</a>', parse_mode='HTML')
flag2 = False
while not flag2:
for i in transactions:
if i['payment_id'] == payment_id + 1:
flag1 = False
while not flag1:
for i in [dict(i) for i in list(await pay.get_transactions())]:
if i['payment_id'] == payment_id:
if c >= 3600:
flag1 = True
break
if i['transaction_status'] == 1:
await message.answer('Успешно')
if db.get_vip_ends(message.from_user.id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=7)).strftime('%d.%m.%Y %H:%M'),
message.from_user.id)
if db.get_vip_ends(tg_id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=1)).strftime('%d.%m.%Y %H:%M'), tg_id)
else:
db.edit_vip_ends(
(datetime.strptime(db.get_vip_ends(message.from_user.id)[0], '%d.%m.%Y %H:%M') +
timedelta(days=7)).strftime('%d.%m.%Y %H:%M'), message.from_user.id)
flag2 = True
flag1 = True
break
else:
await asyncio.sleep(3)
c += 3
else:
await asyncio.sleep(3)
c += 3
except Exception as e:
warning_log.warning(e)


@dp.message_handler(lambda message: message.text == '👑 Вип на месяц - 300₽')
async def buy_month(message):
try:
transactions = [dict(i) for i in list(await pay.get_transactions())]
payment_id = int(transactions[0]['payment_id']) + 1
if payment_id != transactions[0]['payment_id']:
payments = await pay.create_pay(amount=300, currency='RUB', success_url=config.RETURN_URL,
desc=str(payment_id + 1), payment=payment_id + 1)
else:
payments = await pay.create_pay(amount=300, currency='RUB', success_url=config.RETURN_URL,
desc=str(payment_id + 1), payment=payment_id + 2)
c = 0
tg_id = message.from_user.id
db.edit_order_id(1, tg_id)
payment_id = f'{tg_id}-{int(db.get_order_id(tg_id)[0]) + 1}'
payments = await pay.create_pay(amount=300, currency='RUB', success_url=config.RETURN_URL, desc=payment_id,
payment=payment_id)
await message.answer(f'<a href="{payments}">Оплатить 300 рублей</a>', parse_mode='HTML')
transactions = [dict(i) for i in list(await pay.get_transactions())]
flag3 = False
while not flag3:
for i in transactions:
if i['payment_id'] == payment_id + 1:
flag1 = False
while not flag1:
for i in [dict(i) for i in list(await pay.get_transactions())]:
if i['payment_id'] == payment_id:
if c >= 3600:
flag1 = True
break
if i['transaction_status'] == 1:
await message.answer('Успешно')
if db.get_vip_ends(message.from_user.id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=30)).strftime('%d.%m.%Y %H:%M'),
message.from_user.id)
if db.get_vip_ends(tg_id)[0] is None:
db.edit_vip_ends((datetime.now() + timedelta(days=1)).strftime('%d.%m.%Y %H:%M'), tg_id)
else:
db.edit_vip_ends(
(datetime.strptime(db.get_vip_ends(message.from_user.id)[0], '%d.%m.%Y %H:%M') +
timedelta(days=30)).strftime('%d.%m.%Y %H:%M'), message.from_user.id)
flag3 = True
timedelta(days=31)).strftime('%d.%m.%Y %H:%M'), message.from_user.id)
flag1 = True
break
else:
await asyncio.sleep(3)
c += 3
else:
await asyncio.sleep(3)
c += 3
except Exception as e:
warning_log.warning(e)

Expand Down

0 comments on commit ce92b14

Please sign in to comment.