- from flask import Flask, request, abort, Blueprint
- from flask_sqlalchemy import SQLAlchemy
- from flask_sslify import SSLify
- from datetime import datetime
- from datetime import timedelta
- from telebot import types
- from config import *
- from include import *
- from model.model import *
- from button import *
- import datetime as DT
- import telebot
- import requests
- import json
- import random
- main_bot = Blueprint('main_bot', __name__, template_folder = 'templates', static_folder = 'static')
- bot = telebot.TeleBot(TOKEN)
- def bot_status():
- url = WEBHOOK_URL + '/bot'
- r = requests.post(f"https://api.telegram.org/bot{TOKEN}/getWebhookInfo", headers={'Content-Type': 'application/json'}, params={'url': url})
- res = json.loads(r.text)
- if r.status_code == 404:
- return False
- try:
- if res['result']['url']:
- return True
- else:
- return False
- except Exception as e:
- return False
- def check_subscribе(date):
- end_date = datetime.strptime(str(date), "%Y-%m-%d")
- today = datetime.strptime(str(DT.date.today()), "%Y-%m-%d")
- if today == end_date:
- return False
- elif today > end_date:
- return False
- elif today < end_date:
- return True
- def check_pay_qiwi(code):
- try:
- phone = qiwi_phone
- token = qiwi_token
- s = requests.Session()
- s.headers['authorization'] = 'Bearer ' + token
- parameters = {'rows': '50'}
- h = s.get('https://edge.qiwi.com/payment-history/v1/persons/' + phone + '/payments', params = parameters)
- req = json.loads(h.text)
- for i in range(len(req['data'])):
- if req['data'][i]['comment'] == str(code) and req['data'][i]['sum']['currency'] == 643:
- cash = float(req['data'][i]['sum']['amount'])
- return cash
- return False
- except Exception as e:
- return False
- #if bot_status() == False:
- # url = WEBHOOK_URL +'/bot'
- # requests.post(f"https://api.telegram.org/bot{TOKEN}/setWebhook", headers={'Content-Type': 'application/json'}, params={'url': url})
- )
- def replenishment_btc(message):
- chat_id = message.chat.id
- try:
- url, code = message.text.split(')
- except ValueError:
- bot.send_message(chat_id, "Некорректный чек!")
- return
- btc_list = Btc_list(chat_id = chat_id, code = code)
- db.session.add(btc_list)
- db.session.commit()
- bot.send_message(chat_id, "Чек отправлен на обработкŃ!\nЖдите...")
- def add_url(message):
- url = Url(chat_id = message.chat.id, url = message.text)
- db.session.add(url)
- db.session.commit()
- bot.send_message(message.chat.id, "Š�Ńылка отправлена на обработкŃ!\tЖдите...")
- @main_bot.route(', "Š�Ńылка отправлена на обработкŃ!\nЖдите...")
- @main_bot.route('/bot', methods = ['POST'])
- def webhook():
- if request.headers.get('content-type') == 'application/json':
- json_string = request.get_data().decode('utf-8')
- update = types.Update.de_json(json_string)
- bot.process_new_updates([update])
- return ''
- else:
- return abort(403)
- @bot.message_handler(commands = ['start'])
- def start(message):
- chat_id = message.chat.id
- add_user(chat_id, message.chat.username)
- bot.send_message(chat_id, f"Добро ŠæŠ¾Š¶Š°Š»Š¾Š²Š°Ń‚Ń {message.chat.first_name}", reply_markup = button_menu())
- @bot.message_handler(content_types = ['text'])
- def main(message):
- text = message.text
- chat_id = message.chat.id
- if text == 'Тарифы':
- tariff_btn = types.InlineKeyboardMarkup()
- month = types.InlineKeyboardButton(text = 'Тариф на 1 меŃѸц | 300 ₽', callback_data = 'month')
- year = types.InlineKeyboardButton(text = 'Тариф на 1 год | 1500 ₽', callback_data = 'year')
- tariff_btn.row(month)
- tariff_btn.row(year)
- bot.send_message(chat_id, "ДоŃŃ‚ŃŠæŠ½Ń‹Šµ тарифы:", reply_markup = tariff_btn)
- elif text == 'ŠŃ€Š¾Ń„ŠøŠ»Ń':
- user = User.query.filter_by(chat_id = chat_id).first()
- balance_up = types.InlineKeyboardMarkup()
- btn = types.InlineKeyboardButton(text = 'ŠŠ¾ŠæŠ¾Š»Š½ŠøŃ‚Ń Š±Š°Š»Š°Š½Ń', callback_data = 'balance_up')
- balance_up.row(btn)
- if check_subscribе(user.subscribе_date) == False:
- subscribе = "<b>ŠŠ¾Š´ŠæŠøŃка ŠøŃтекла!</b>"
- else:
- subscribе = f"<b>ŠŠ¾Š´ŠæŠøŃка дейŃŃ‚Š²ŃŠµŃ‚: </b> <i>{user.subscribе_date}</i>"
- msg = f"""
- <b>Chat Id: </b><code>{chat_id}</code>
- <b>БаланŃ: </b><i>{user.balance}</i> ₽
- {subscribе}
- """
- bot.send_message(chat_id, msg, reply_markup = balance_up, parse_mode = 'HTML')
- elif text == 'Š˛Ń‚ŠæŃ€Š°Š²ŠøŃ‚Ń ŃŃылкŃ':
- user = User.query.filter_by(chat_id = chat_id).first()
- if check_subscribе(user.subscribе_date):
- msg = bot.send_message(chat_id, "ОтправŃте ŃŃылкŃ:")
- bot.register_next_step_handler(msg, add_url)
- else:
- bot.send_message(chat_id, "Š£ Š²Š°Ń Š½ŠµŃ‚Ń ŠæŠ¾Š´ŠæŠøŃŠŗŠø на бота!")
- @bot.callback_query_handler(func=lambda call: True)
- def call_func(call):
- chat_id = call.message.chat.id
- message_id = call.message.message_id
- if call.data == 'month':
- btn_buy = types.InlineKeyboardMarkup()
- btn = types.InlineKeyboardButton(text = 'ŠŃпитŃ', callback_data = "buy_month")
- back = types.InlineKeyboardButton(text = '⬅️ Назад', callback_data = 'back')
- btn_buy.row(btn)
- btn_buy.row(back)
- bot.edit_message_text(chat_id = chat_id, message_id = message_id, text = "Тариф на 1 меŃѸц | 300 ₽", reply_markup = btn_buy)
- elif call.data == 'year':
- btn_buy = types.InlineKeyboardMarkup()
- btn = types.InlineKeyboardButton(text = 'ŠŃпитŃ', callback_data = "buy_year")
- back = types.InlineKeyboardButton(text = '⬅️ Назад', callback_data = 'back')
- btn_buy.row(btn)
- btn_buy.row(back)
- bot.edit_message_text(chat_id = chat_id, message_id = message_id, text = "Тариф на 1 год | 1500 ₽", reply_markup = btn_buy)
- elif call.data == 'back':
- tariff_btn = types.InlineKeyboardMarkup()
- month = types.InlineKeyboardButton(text = 'Тариф на 1 меŃѸц | 300 ₽', callback_data = 'month')
- year = types.InlineKeyboardButton(text = 'Тариф на 1 год | 1500 ₽', callback_data = 'year')
- tariff_btn.row(month)
- tariff_btn.row(year)
- bot.edit_message_text(chat_id = chat_id, message_id = message_id, text = "ДоŃŃ‚ŃŠæŠ½Ń‹Šµ тарифы:", reply_markup = tariff_btn)
- elif call.data == 'buy_month':
- user = User.query.filter_by(chat_id = chat_id).first()
- date = DT.date.today()
- if user.balance >= 300:
- user.balance -= 300
- if user.subscribе_date >= date:
- user.subscribе_date += timedelta(days = 30)
- else:
- user.subscribе_date = date + timedelta(days = 30)
- user_session = db.session.merge(user)
- db.session.add(user_session)
- db.session.commit()
- bot.send_message(chat_id, "ŠŠ¾Š´ŠæŠøŃка ŃŃŠæŠµŃŠ½Š¾ оформлена!")
- else:
- bot.send_message(chat_id, 'Š£ Š²Š°Ń Š½Šµ доŃтаточно ŃредŃтв на Š±Š°Š»Š°Š½Ńе, пополните баланŃ!')
- elif call.data == 'buy_year':
- user = User.query.filter_by(chat_id = chat_id).first()
- date = DT.date.today()
- if user.balance >= 1500:
- user.balance -= 1500
- if user.subscribе_date >= date:
- user.subscribе_date += timedelta(days = 365)
- else:
- user.subscribе_date = date + timedelta(days = 365)
- user_session = db.session.merge(user)
- db.session.add(user_session)
- db.session.commit()
- bot.send_message(chat_id, "ŠŠ¾Š´ŠæŠøŃка ŃŃŠæŠµŃŠ½Š¾ оформлена!")
- else:
- bot.send_message(chat_id, 'Š£ Š²Š°Ń Š½Šµ доŃтаточно ŃредŃтв на Š±Š°Š»Š°Š½Ńе, пополните баланŃ!')
- elif call.data == 'balance_up':
- balance_up = types.InlineKeyboardMarkup()
- qiwi = types.InlineKeyboardButton(text = 'QIWI', callback_data = 'qiwi')
- btc = types.InlineKeyboardButton(text = 'BTC Banker', callback_data = 'btc_banker')
- balance_up.row(qiwi)
- balance_up.row(btc)
- bot.edit_message_text(chat_id = chat_id, message_id = message_id, text = "Выберите ŃŠæŠ¾ŃŠ¾Š± оплаты:", reply_markup = balance_up)
- elif call.data == 'HTML'anker':
- msg = bot.send_message(chat_id, "ОтправŃте чек BTC Banker\nŠŃ€ŠøŠ¼ŠµŃ€ чека: https://telegram.me/BTC_CHANGE_BOT?start=c_3f50b6062ace52053cdf09f6af0s58f1")
- bot.register_next_step_handler(msg, replenishment_btc)
- elif call.data == 'qiwi':
- user = User.query.filter_by(chat_id = chat_id).first()
- code = random.randint(11111111, 99999999)
- user.code = code
- db.session.add