Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from telegram.ext import *
- from telegram import *
- from strings import Strings, INVESTS_QUIZ, SEARCH_INVEST_QUIZ, BUY_CRYPTO, SELL_CRYPTO
- import logging
- import mysql.connector
- logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
- level=logging.INFO)
- logger = logging.getLogger(__name__)
- NOTIFICATION_GROUP = -358742411
- mydb = mysql.connector.connect(
- host="localhost",
- user="bot",
- password="DjoVKccBz5UCOfI1",
- database="bot"
- )
- mycursor = mydb.cursor()
- SELECT_LANGUAGE = open(
- "./strings/selectlanguage.txt",
- "r",
- encoding="utf8"
- ).read()
- TOKEN = '711442895:AAHXducjiRY6FMt2ixRH8u3N9F5qDCDlHkI'
- updater = Updater(TOKEN)
- Users = {}
- # Это класс пользователя, где я храню данные о нем ( или подгружаю )
- class User:
- def __init__(self, user, lang):
- self.user = user
- self.lang = lang
- self.phone = ""
- self.fullname = ""
- self.direction = 0
- self.balance = 0
- self.state = 0 # Состояние пользователя по умолчанию (Ничего не ожидаем)
- self.quiz = None # Текущий опрос
- self.quizIndex = 0 # Индекс текущего вопроса в опросе
- self.quizCallback = None # Функция которая будет вызвана после опроса
- self.quizId = 0 # идентификатор опроса (Для БД)
- self.quizAnswers = {} # Ответы пользователя
- def initUsers():
- mycursor.execute("SELECT * FROM `users`")
- result = mycursor.fetchall();
- for i in result:
- user = User(i[1], i[2])
- user.fullname = i[3]
- user.phone = i[4]
- user.direction = i[5]
- Users[user.user] = user
- initUsers()
- def insertQuizAnswer(user, quiz, question, answer):
- q = "INSERT INTO `quiz` (`user`, `quiz`, `question`, `answer`) VALUES (%s, %s, %s, %s)"
- val = (
- user,
- quiz,
- question,
- answer
- )
- mycursor.execute(q, val)
- mydb.commit()
- def insertUser(user):
- q = "INSERT INTO `users` (`user`, `lang`, `phone`, `direction`, `fullname`) VALUES ({}, {}, '{}', {}, '{}')".format(
- user.user,
- user.lang,
- user.phone,
- user.direction,
- user.fullname
- )
- mycursor.execute(q)
- mydb.commit()
- Handlers = {}
- def showInterestsKeyboard(bot, update, user):
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["OFFERS_FOR_YOU"], None, "offers_for_you")],
- [InlineKeyboardButton(Strings[user.lang]["PARLAMENT_BUTTON"], None, "parlament")],
- [InlineKeyboardButton(Strings[user.lang]["TRADE_BUTTON"], None, "change_bot")],
- [InlineKeyboardButton(Strings[user.lang]["COOPERATION_BUTTON"], None, "cooperation")],
- [InlineKeyboardButton(Strings[user.lang]["OUR_CONTACTS"], None, "our_contacts")],
- [InlineKeyboardButton(Strings[user.lang]["DONATE_BUTTON"], None, "donate")]
- ])
- if (update.callback_query is not None):
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["REQUEST_INTERESTS"], reply_markup=inline_keyboard)
- def showChangeBot(bot, update, user):
- my_keyboard = ReplyKeyboardMarkup([
- ["💼 Кошелек", "📊 Обмен", ],
- ['🛠 Настройки', "🔎 Инфо"]], resize_keyboard=True)
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["CHANGE_TEXT_BOT"], reply_markup=my_keyboard)
- def inputQuizHandler(bot, update, user, first=False):
- ind = user.quizIndex
- current_quiz = user.quiz
- user.quizIndex += 1
- if (len(current_quiz) == user.quizIndex):
- user.quizCallback(bot, update, user)
- return
- if (not first):
- answer = update.message.text
- user.quizAnswers[current_quiz[ind]] = answer
- insertQuizAnswer(user.user, user.quizId, ind, answer)
- question = Strings[user.lang][current_quiz[user.quizIndex]]
- bot.send_message(user.user, question)
- def about_change(bot, update, user):
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["SUPPORT_BUTTON"], None, "s")],
- [InlineKeyboardButton(Strings[user.lang]["COMMUNICATE_WALLET"], None, "s")],
- [InlineKeyboardButton(Strings[user.lang]["TRADE_RULLE"], None, "s")],
- [InlineKeyboardButton(Strings[user.lang]["VEREFICATONS_BUTTON"], None, "s")],
- [InlineKeyboardButton(Strings[user.lang]["BACK_BUTTON"], None, "change_bot")]
- ])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]['PARTNER_TEXT'], reply_markup=inline_keyboard)
- def change_crypto_menu(bot, update, user):
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["BUY_BUTTON"], None, "buy")],
- [InlineKeyboardButton(Strings[user.lang]["SELL_BUTTON"], None, "sell")],
- [InlineKeyboardButton(Strings[user.lang]["BACK_BUTTON"], None, "change_bot")]
- ])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, "Выбери тип операции, которую ты бы хотел произвести", reply_markup=inline_keyboard)
- def inputNameHandler(bot, update, user):
- user.fullname = update.message.text
- user.state = 0 # Сбрасываем состояние ожидания ввода обратно в 0 (Ничего не ожидаем)
- notification = "Номер: " + str(user.phone) + "\nФИО: " + user.fullname
- # bot.send_message(NOTIFICATION_GROUP, notification)
- insertUser(user)
- showInterestsKeyboard(bot, update, user)
- # Словарь для обработчиков ввода (таких как ФИО)
- InputHandlers = {
- 1: inputNameHandler,
- 2: inputQuizHandler
- }
- def contactHandler(bot, update):
- contact = update.message.contact
- user = Users[update.message.chat.id]
- if (user is None):
- return
- user.state = 1 # Ожидание ввода от пользователя ФИО
- user.phone = contact.phone_number
- remove_keyboard = ReplyKeyboardRemove(True)
- bot.send_message(user.user, Strings[user.lang]['REQUEST_NAME'], reply_markup=remove_keyboard)
- def meetHandler(bot, update, user):
- message = None
- if (update.callback_query is not None):
- message = update.callback_query.message
- bot.delete_message(user.user, message.message_id)
- print(message)
- else:
- message = update.message
- print(message)
- if (user.fullname is not ""):
- showInterestsKeyboard(bot, update, user)
- return
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["INVEST_BUTTON"], None, "new_invest")],
- [InlineKeyboardButton(Strings[user.lang]["SEARCH_INVESTS_BUTTON"], None, "new_search_invests")],
- [InlineKeyboardButton(Strings[user.lang]["USER_BUTTON"], None, "new_user")]
- ])
- bot.send_message(
- user.user,
- Strings[user.lang]["GREET"] % message.chat.first_name,
- reply_markup=inline_keyboard
- )
- def wallets_change(bot, update, user):
- bot.delete_message(user.user, update.callback_query.message.message_id)
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]['balance_button'], None, "mybalance_change")],
- [InlineKeyboardButton(Strings[user.lang]['get_cheek'], None, "cheek_change")],
- [InlineKeyboardButton(Strings[user.lang]["CHANGE_ABOUT"], None, "text_crypto")],
- [InlineKeyboardButton(Strings[user.lang]["BACK_BUTTON"], None, "change_bot")]
- ])
- bot.send_message(user.user, "Личный кабинет", reply_markup=inline_keyboard)
- def parnets_change(bot, update, user):
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["SUPPORT_BUTTON"], "@OnlyGet")],
- [InlineKeyboardButton(Strings[user.lang]["COMMUNICATE_WALLET"], None, "")],
- [InlineKeyboardButton(Strings[user.lang]["TRADE_RULLE"], None, "")],
- [InlineKeyboardButton(Strings[user.lang]["VEREFICATONS_BUTTON"], None, "")],
- [InlineKeyboardButton(Strings[user.lang]["BACK_BUTTON"], None, "")]
- ])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["PARTNER_TEXT"], reply_markup=inline_keyboard)
- def cheek_changes(bot, update, user):
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["BACK_BUTTON"], None, "change_bot")]
- ])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["CHEEK_TEXT"], reply_markup=inline_keyboard)
- # message = update.message.text
- # print(message)
- def onEnglishHandler(bot, update, user=None):
- user = User(update.callback_query.message.chat.id, 2)
- Users[user.user] = user
- meetHandler(bot, update, user)
- def onRussianHandler(bot, update, user=None):
- user = User(update.callback_query.message.chat.id, 1)
- Users[user.user] = user
- meetHandler(bot, update, user)
- def joinCommunityHandlers(bot, update, user=None):
- user = Users[update.callback_query.message.chat.id]
- bot.send_message(user.user, Strings[user.lang]["JOIN_COMMUNITY"])
- def newInvestHandler(bot, update, user=None):
- user.direction = 1
- sharePhoneKeyboard = ReplyKeyboardMarkup([[
- KeyboardButton(Strings[user.lang]["SHARE_PHONE"], request_contact=True)
- ]], one_time_keyboard=True, resize_keyboard=True)
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["REQUEST_CONTACT"], reply_markup=sharePhoneKeyboard)
- def newSearchInvestsHandler(bot, update, user=None):
- user.direction = 2
- sharePhoneKeyboard = ReplyKeyboardMarkup([[
- KeyboardButton(Strings[user.lang]["SHARE_PHONE"], request_contact=True)
- ]], one_time_keyboard=True, resize_keyboard=True)
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["REQUEST_CONTACT"], reply_markup=sharePhoneKeyboard)
- def newUserHandler(bot, update, user=None):
- user.direction = 3
- sharePhoneKeyboard = ReplyKeyboardMarkup([[
- KeyboardButton(Strings[user.lang]["SHARE_PHONE"], request_contact=True)
- ]], one_time_keyboard=True, resize_keyboard=True)
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["REQUEST_CONTACT"], reply_markup=sharePhoneKeyboard)
- LINK = "https://www.donationalerts.com/r/parlamentclub"
- def donateHandler(bot, update, user=None):
- inline_keyboard = InlineKeyboardMarkup([[InlineKeyboardButton(" 100₽ ",
- url=LINK),
- InlineKeyboardButton(" 250₽ ",
- url=LINK),
- InlineKeyboardButton(" 500₽ ",
- url=LINK)],
- [InlineKeyboardButton(" Другая сумма ",
- url=LINK)],
- [InlineKeyboardButton(Strings[user.lang]["BACK_BUTTON"], None,
- "interests")]])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["DONATE"], reply_markup=inline_keyboard)
- def offersForYouHandler(bot, update, user=None):
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["INVEST_BUTTON"], None, "invest")],
- [InlineKeyboardButton(Strings[user.lang]["SEARCH_INVESTS_BUTTON"], None, "search_invests")],
- [InlineKeyboardButton(Strings[user.lang]["PARTNERS_BUTTON"], None, "set_partner")],
- [InlineKeyboardButton(Strings[user.lang]["COMMUNITY_BUTTON"], None, "community")],
- [InlineKeyboardButton(Strings[user.lang]["FOND_BUTTON"], None, "dev")],
- [InlineKeyboardButton(Strings[user.lang]["TRIP_BUSS_BUTTON"], None, "trip")],
- [InlineKeyboardButton(Strings[user.lang]["MAIN_BUTTON"], None, "interests")]
- ])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["REQUEST_INTERESTS"], reply_markup=inline_keyboard)
- def quizCompletedHandler(bot, update, user):
- bot.send_message(user.user, Strings[user.lang]["QUIZ_COMPLETED"])
- showInterestsKeyboard(bot, update, user)
- def collectInvestsHandler(bot, update, user=None):
- bot.delete_message(user.user, update.callback_query.message.message_id)
- user.state = 2
- user.quiz = INVESTS_QUIZ
- user.quizIndex = -1
- user.quizId = 1
- user.quizAnswers = {}
- user.quizCallback = quizCompletedHandler
- inputQuizHandler(bot, update, user, True)
- def getInvestorHandler(bot, update, user=None):
- bot.delete_message(user.user, update.callback_query.message.message_id)
- user.state = 2
- user.quiz = SEARCH_INVEST_QUIZ
- user.quizIndex = -1
- user.quizId = 2
- user.quizAnswers = {}
- user.quizCallback = quizCompletedHandler
- inputQuizHandler(bot, update, user, True)
- def getBuyCrypto(bot, update, user=None):
- bot.delete_message(user.user, update.callback_query.message.message_id)
- user.state = 2
- user.quiz = BUY_CRYPTO
- user.quizIndex = -1
- user.quizId = 3
- user.quizAnswers = {}
- user.quizCallback = quizCompletedHandler
- inputQuizHandler(bot, update, user, True)
- def getSellCrypto(bot, update, user=None):
- bot.delete_message(user.user, update.callback_query.message.message_id)
- user.state = 2
- user.quiz = SELL_CRYPTO
- user.quizIndex = -1
- user.quizId = 4
- user.quizAnswers = {}
- user.quizCallback = quizCompletedHandler
- inputQuizHandler(bot, update, user, True)
- CallbackHandlers = {
- "select_ru": onRussianHandler,
- "select_en": onEnglishHandler,
- "invest": ["INVEST", [
- ["WRITE_PROFILE", None, "https://goo.gl/P1tb8N"],
- ["DOWNLOAD_CASE", "dev"],
- ["COLLECT_INVESTS", "collect_invests"],
- ["INVEST_PARLAMENT_BUTTON", "invest_parlament"],
- ["MENTORS_BUTTON", "dev"],
- ["COMMUNITY_CHAT", None, "https://t.me/parlamentchat"],
- ["MAIN_BUTTON", "interests"],
- ["BACK_BUTTON", "offers_for_you"]
- ]],
- "invest_parlament": ["DEV", [
- ["BACK_BUTTON", "offers_for_you"],
- ]],
- "interests": showInterestsKeyboard,
- "search_invests": ["SEARCH_INVESTS", [
- ["WRITE_BRIEF_BUTTON", "write_brief"],
- ["GET_RECOMENDATION", "dev_search_invests"],
- ["MENTORS_BUTTON", "dev_search_invests"],
- ["ORDER_INVEST_PACK", 'order_invest_pack'],
- ["GET_INVESTOR", 'get_investor'],
- ["COMMUNITY_CHAT", None, "https://t.me/parlamentchat"],
- ["MAIN_BUTTON", "interests"],
- ["BACK_BUTTON", "offers_for_you"]
- ]],
- "order_invest_pack": ["ORDER_INVEST", [
- ["ORDER_LENGING_BUTTON", "-"],
- ["ORDER_TIESER_BUTTON", "-"],
- ["ORDER_PRESENTATION", "-"],
- ["ORDER_INVEST_ESCORT", "-"],
- ["ORDER_LAW_ESCORT", "-"],
- ["MAIN_BUTTON", "interests"],
- ["BACK_BUTTON", "search_invests"]
- ]],
- "community": ["COMMUNITY", [
- ["BILLIONS_BUTTON", None, "http://mlrd.me"],
- ["COMMUNITY_CHAT", None, "https://t.me/parlamentchat"],
- ["ASK_BUTTON", "ask"],
- ["MAIN_BUTTON", "interests"],
- ["BACK_BUTTON", "offers_for_you"]
- ]],
- "write_brief": ["WRITE_BRIEF", [
- ["GO_TO_SITE", None, "https://goo.gl/2X1CkW"],
- ["BACK_BUTTON", "search_invests"],
- ]],
- "set_partner": ["DEV", [
- ["BACK_BUTTON", "interests"]
- ]],
- "dev": ["DEV", [
- ["BACK_BUTTON", "interests"]
- ]],
- "dev_search_invests": ["DEV", [
- ["BACK_BUTTON", "search_invests"]
- ]],
- "join_to_community": joinCommunityHandlers,
- "new_invest": newInvestHandler,
- "new_search_invests": newSearchInvestsHandler,
- "new_user": newUserHandler,
- "donate": donateHandler,
- "offers_for_you": offersForYouHandler,
- "collect_invests": collectInvestsHandler,
- "get_investor": getInvestorHandler,
- "change_bot": showChangeBot,
- "buy": getBuyCrypto,
- "sell": getSellCrypto,
- "wallets": wallets_change,
- "trade_deals": change_crypto_menu,
- "cheek_change": cheek_changes,
- "text_crypto": about_change,
- "fond": ["FOND", [
- ["GO_TO_SITE", None, "https://example.com"],
- ["BACK_BUTTON", "offers_for_you"],
- ]],
- "ask": ["ASK", [
- ["GO_TO_HELPER", None, "https://t.me/username"],
- ["BACK_BUTTON", "offers_for_you"],
- ]],
- "trip": ["TRIP", [
- ["GO_TO_ASIA", "dev"],
- ["GO_TO_USA", None, "https://t.me/joinchat/DCZxH08MCT34KLlANfoaAg"],
- ["BACK_BUTTON", "offers_for_you"],
- ]],
- "parlament": ["PARLAMENTS", [
- ["JOIN_COMMUNITY_BUTTON", None, "https://goo.gl/WorJUd"],
- ["COMMUNITY_CHAT", None, "https://t.me/parlamentchat"],
- ["MAIN_BUTTON", "interests"],
- ]],
- "write_admin": ["WRITE_ADMIN", [
- ["GO_TO_HELPER", None, "https://t.me/username"],
- ["MAIN_BUTTON", "interests"],
- ["BACK_BUTTON", "parlament"]
- ]],
- "our_contacts": ["CONTACTS", [
- ["FACEBOOK_BUTTON", None, "https://www.facebook.com/Parlament-CLUB-2187671614802936/"],
- ["VK_BUTTON", None, "https://vk.com/parlament.club"],
- ["INSTAGRAM_BUTTON", None, "https://www.instagram.com/parlament.club/"],
- ["EMAIL_BUTTON", None, "https://example.com"],
- ["ADMIN_BUTTON", "write_admin"],
- ["BACK_BUTTON", "interests"]
- ]],
- "cooperation": ["COOPERATION", [
- ["BUY_AD", "-"],
- ["CROSS_PR", "-"],
- ["COOPERATIVE_PROJECT", "-"],
- ["ADVICE", "-"],
- ["PERSONAL_ESCORT", "-"],
- ["OTHER_COOPERATION", "-"],
- ["BACK_BUTTON", "interests"]
- ]]
- }
- selectLanguageKeyboard = InlineKeyboardMarkup([[
- InlineKeyboardButton("Русский 🇷🇺", None, "select_ru"),
- InlineKeyboardButton("English 🇱🇷", None, "select_en")
- ]])
- def getInlineKeyboard(raw_keyboard, lang):
- # Функция для генерации инлайновой клавиатуры из примитивного типа
- inline_keyboard = []
- for i in raw_keyboard:
- text = Strings[lang][i[0]]
- if (len(i) > 2):
- inline_keyboard.append([InlineKeyboardButton(text, i[2])])
- else:
- inline_keyboard.append([InlineKeyboardButton(text, None, i[1])])
- return InlineKeyboardMarkup(inline_keyboard)
- def errorHandler(bot, update, error):
- print(error)
- def callbackQueryHandler(bot, update):
- data = update.callback_query.data
- if (data in CallbackHandlers):
- user = None
- user_id = update.callback_query.message.chat.id
- if (user_id in Users):
- user = Users[user_id]
- handler = CallbackHandlers[data]
- if (callable(handler)):
- CallbackHandlers[data](bot, update, user)
- elif (type(handler) is str):
- bot.delete_message(user_id, update.callback_query.message.message_id)
- bot.send_message(user_id, Strings[user.lang][handler])
- elif (type(handler) is list):
- bot.delete_message(user_id, update.callback_query.message.message_id)
- inline_keyboard = getInlineKeyboard(handler[1], user.lang)
- bot.send_message(user_id, Strings[user.lang][handler[0]], reply_markup=inline_keyboard)
- bot.answerCallbackQuery(update.callback_query.id)
- def startHandler(bot, update):
- user_id = update.message.chat.id
- if (user_id in Users):
- meetHandler(bot, update, Users[user_id])
- return
- bot.send_message(user_id, SELECT_LANGUAGE, reply_markup=selectLanguageKeyboard)
- def textHandler(bot, update):
- user = Users[update.message.chat.id]
- if (user is not None):
- if (user.state in InputHandlers):
- InputHandlers[user.state](bot, update, user)
- return
- bot.send_message(update.message.chat.id, update.message.text)
- def wallet_inline(bot,update):
- user = Users()
- inline_keyboard = InlineKeyboardMarkup([
- [InlineKeyboardButton(Strings[user.lang]["INVEST_BUTTON"], None, "invest")],
- [InlineKeyboardButton(Strings[user.lang]["SEARCH_INVESTS_BUTTON"], None, "search_invests")],
- [InlineKeyboardButton(Strings[user.lang]["PARTNERS_BUTTON"], None, "set_partner")],
- [InlineKeyboardButton(Strings[user.lang]["COMMUNITY_BUTTON"], None, "community")],
- [InlineKeyboardButton(Strings[user.lang]["FOND_BUTTON"], None, "dev")],
- [InlineKeyboardButton(Strings[user.lang]["TRIP_BUSS_BUTTON"], None, "trip")],
- [InlineKeyboardButton(Strings[user.lang]["MAIN_BUTTON"], None, "interests")]
- ])
- bot.delete_message(user.user, update.callback_query.message.message_id)
- bot.send_message(user.user, Strings[user.lang]["REQUEST_INTERESTS"], reply_markup=inline_keyboard)
- updater.dispatcher.add_handler(RegexHandler("^(💼 Кошелек)$", wallet_inline))
- updater.dispatcher.add_handler(MessageHandler(Filters.contact, contactHandler))
- updater.dispatcher.add_handler(MessageHandler(Filters.text, textHandler)) # у тебя эта хуйня ворует текст
- updater.dispatcher.add_handler(CommandHandler('start', startHandler))
- updater.dispatcher.add_handler(CallbackQueryHandler(callbackQueryHandler))
- updater.dispatcher.add_error_handler(errorHandler)
- updater.start_polling()
- updater.idle()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement