import telebot API_TOKEN = '' bot = telebot.TeleBot(API_TOKEN) #Keyboard from telebot.types import ReplyKeyboardMarkup, KeyboardButton #SHA256 for sign import hashlib #Date&Time from datetime import date import time #JSON for database import json db = {"Nick":10} def read(): #Read db and push global db with open('db.json', 'r') as openfile: db = json.load(openfile) def write(): #Read db and write js = json.dumps(db, indent=4) with open("db.json", "w") as outfile: outfile.write(js) #Create new table #write() #Step(reg / pay / other) steps = {} #Pay number pnum = 0 #Pay nick pnick = "" @bot.message_handler(commands=['start']) def welcome(message): markup = ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Баланс') markup.add('Ввести/Вывести') markup.add('Перевод') markup.add('Помощь') bot.reply_to(message, """ Start message """,reply_markup=markup) @bot.message_handler(commands=['help']) def help(message): bot.reply_to(message, """ Help message """) def err_reg(message): bot.reply_to(message,""" Пожалуйста,авторизуйстесь. Для этого введите свой игровой ник.""") global steps steps[message.chat.id]="reg" @bot.message_handler(commands=['change']) def change(message): bot.reply_to(message,""" Сейчас недоступен обмен в любое время,приносим извинения за временные неудобства. Чтобы продать/купить валюту Вы должны назначить время от 17:00 до 22:00 ПО МОСКВЕ(Оффициальный способ) Или поменять валюту у игроков(Неоффициальный способ,не безопасно) Введите время,пожалуйста: """) global steps steps[message.chat.id]="change" def checkauth(message): read() id=str(message.chat.id) if id in db: return True elif not id in db: err_reg(message) return False @bot.message_handler(commands=['balance']) def balance(message): read() if checkauth(message): name=db[str(message.chat.id)] bot.reply_to(message,"Ваш баланс >> "+str(db[name])+" dM") @bot.message_handler(commands=['unreg']) def unreg(message): try: id=str(message.chat.id) print(id) db.pop(id,None) print(db) write() bot.reply_to(message,""" Вы успешно вышли из своего аккаунта. ВНИМАНИЕ: ВАШ НИК БОЛЬШЕ НЕ ПРИВЯЗАН НИ К ОДНОМУ ТЕЛЕГРАМ АККАУНТУ. ЕГО МОГУТ УКРАСТЬ,РЕКОМЕНДУЕМ ПРИВЯЗАТЬ ОБРАТНО.""") except: bot.reply_to(message,"Что-то пошло не так.") @bot.message_handler(commands=['pay']) def pay(message): if checkauth(message): bot.reply_to(message,"Введите сумму,которую хотите перевести") global steps steps[message.chat.id]="pay_num" @bot.message_handler(func=lambda message: True) def checks(message): global steps if message.text == 'Баланс': balance(message) db['breakme'] elif message.text == 'Ввести/Вывести': change(message) db['breakme'] elif message.text == 'Перевод': pay(message) db['breakme'] elif message.text == 'Помощь': help(message) db['breakme'] print(111111111111111111111111) try: print(steps[message.chat.id]) except: steps[message.chat.id] = None if steps[message.chat.id] == "reg": id=message.chat.id nick=message.text print(type(not nick in db)) #Check id(get id by nick owner) in db try: getid = list(db.keys())[list(db.values()).index(nick)] except: getid=None if not getid in db: print(nick) db[id]=nick if nick in db: pass else: db[nick]=0 write() bot.reply_to(message,"Поздравляю,Вы успешно авторизовались.") #elif nick in db: elif getid in db: bot.reply_to(message,"""Вы пытаетесь зайти под именем другого игрока или с нового аккаунта? Поддержка больше чем 1 аккаунта не реализована,напишите администратору - @kirill638355""") steps[message.chat.id]=None elif steps[message.chat.id] == "pay_num": global pnum try: read() pnum = int(message.text) if int(pnum) > 0: if db[db[str(message.chat.id)]] > int(pnum): bot.reply_to(message,"Введите ник адресата") steps[message.chat.id]="pnick" else: bot.reply_to(message,"Что-то пошло не так,отмена операции") steps[message.chat.id]=None else: bot.reply_to(message,"Что-то пошло не так,отмена операции") steps[message.chat.id]=None except: bot.reply_to(message,"Что-то пошло не так,отмена операции") steps[message.chat.id]=None elif steps[message.chat.id] == "pnick": global pnick pnick = message.text bot.reply_to(message,"Ник: "+pnick+"\nСумма: "+str(pnum)+"\nВы уверены? Для подтверждения напишите 'да'(без ковычек и маленькими буквами)") steps[message.chat.id] = "pay_valid" elif steps[message.chat.id] == "pay_valid": if message.text == 'да': try: read() print(db) print(str(db[pnick])+" "+str(db[pnick])) db[pnick] = db[pnick]+pnum db[db[str(message.chat.id)]] = db[db[str(message.chat.id)]]-pnum #Date today = date.today() payer=db[str(message.chat.id)] payer_bill=str(message.chat.id) sum=str(pnum) dttm=today.strftime("%d.%m.%Y_"+time.strftime("%H:%M", time.localtime())) signstr=payer+pnick+dttm sign=str(hashlib.sha256(str.encode(signstr)).hexdigest()) bot.reply_to(message,"Успешно") bot.reply_to(message,f""" -----ЧЕК---- Плательщик: {payer} Номер счёта: {payer_bill} Сумма: {sum} ~~~~~~~~~~ Получатель: {pnick} Время&Дата: {dttm} ------------ ЧАСТНЫЙ БАНК ИГРОКА _SAN5_SkeLet0n_ ПОДПИСЬ: {sign} ___________ """) f=open('signs.sha256','a') f.write(sign+" "+dttm+"\n") f.close() write() except: bot.reply_to(message,"Что-то пошло не так,отмена операции") else: steps[message.chat.id] = None bot.reply_to(message,"Вы отменили операцию") elif steps[message.chat.id] == "change": try: read() #print(message) bot.send_message(2057834471,"#######################\nИгрок "+str(db[str(message.chat.id)])+" (@"+message.from_user.username+")"+" просит встречу в "+message.text+"\n#######################\n") bot.reply_to(message,"Запрос успешно отправлен!") steps[message.chat.id]=None except: bot.reply_to(message,"Что-то пошло не так,отмена операции") bot.infinity_polling()