コード例 #1
0
def command_pay(message):
    log_text(message.chat.id, message.message_id, '--- DONATE --- ')
    if str(message.from_user.id) in BANNED:
        log_text(message.chat.id, message.message_id,
                 '--- BANIDO --- ' + message.text)
        bot.send_message(message.chat.id, msgs.banned)
        return 0
    send_clean_msg(bot, message.chat.id, msgs.donate_warn)
    bot.send_invoice(
        message.chat.id,
        title='RastreioBot',
        description='Para doar R$ 10, clique no botão abaixo.',
        provider_token=STRIPE,
        currency='BRL',
        prices=[types.LabeledPrice(label='Doar R$ 10', amount=1000)],
        start_parameter='doar10',
        invoice_payload='RastreioBot')
    bot.send_invoice(
        message.chat.id,
        title='RastreioBot',
        description='Para doar R$ 15, clique no botão abaixo.',
        provider_token=STRIPE,
        currency='BRL',
        prices=[types.LabeledPrice(label='Doar R$ 15', amount=1500)],
        start_parameter='doar15',
        invoice_payload='RastreioBot')
コード例 #2
0
ファイル: bot.py プロジェクト: artjerom/filpmoney
def to_up_ballance(m):
    if m.text == 'Вернуться':
        response_go(m)
    else:
        response_go(m)
        amount = int(m.text + '00')
        prices = [
            types.LabeledPrice(label='Пополнение вашего баланса',
                               amount=amount),
            types.LabeledPrice('Комиссия', 1500)
        ]
        fakeMoney = m.text
        bot.send_message(
            m.chat.id, 'Переведите ' + m.text +
            'руб. На qiwi кошелек: +79308162369. Код: 4221')
コード例 #3
0
def otp(message):
    """
        Receives one-time-password
        Sends invoice payment
    """
    otp = message.text
    contract = utility.get(str(message.chat.id) + 'contract_id')
    url_otp_2 = f'https://web.ewa.ua/ewa/api/v9/contract/{contract}/otp?customer={otp}'
    r_otp_2 = requests.get(url_otp_2, headers=headers, cookies=cookies)
    print(r_otp_2)
    connection = sql.connect('DATABASE.sqlite')
    q = connection.cursor()
    q.execute("SELECT * from user WHERE id='%s'" % message.from_user.id)
    results = q.fetchall()
    connection.commit()
    q.close()
    connection.close()
    random_integer = random.randint(10000, 99999)
    payment = utility.get(str(message.chat.id) + 'tariff_payment')
    product_name = f"Travel insurance by - {utility.get(str(message.chat.id) + 'tariff_name')}"
    order = f'order{str(random_integer)}'
    amount = round(payment * 100.)
    bot.send_invoice(message.chat.id,
                     title=product_name,
                     description='Travel insurance policy',
                     invoice_payload=order,
                     provider_token=config.liqpay_token,
                     currency='UAH',
                     prices=[types.LabeledPrice(label='Полис', amount=amount)],
                     start_parameter='true',
                     photo_url='https://aic.com.ua/img/pyt3.jpg')
    utility.update({str(message.chat.id) + 'order': order})
コード例 #4
0
ファイル: bot.py プロジェクト: ndmel/navi_event_bot
def register(m):
    global user_state, navi_container, navi_naviaddress
    keyboard_hider = types.ReplyKeyboardRemove()
    navi_route = json.loads(
        get_naviadress(token, navi_container, navi_naviaddress))
    navi_desc = navi_route.get('result').get('description')
    if navi_desc != '' and navi_desc is not None:
        navi_desc = ast.literal_eval(navi_desc)
        money = navi_desc.get('event_money')

        if money != "" and int(money) != 0:
            bot.send_message(m.chat.id,
                             'Оплата за регистрацию',
                             reply_markup=keyboard_hider)
            bot.send_invoice(
                m.chat.id, 'Билет на мероприятие',
                'Посещение данного мероприятия платно. Пожалуйтса, оплатите билет.',
                '67192', payment_token, 'RUB',
                [types.LabeledPrice(label='Регистрация', amount=int(money))],
                'tme')

        else:
            user_state = 'registering'
            bot.send_message(m.chat.id,
                             "Введите имя:",
                             reply_markup=keyboard_hider)

    else:
        user_state = 'registering'
        bot.send_message(m.chat.id,
                         "Введите имя:",
                         reply_markup=keyboard_hider)
コード例 #5
0
ファイル: rastreiobot.py プロジェクト: mensonones/RastreioBot
def command_pay(message):
    log_text(message.chat.id, message.message_id, '--- PAYMENT --- ')
    send_clean_msg(bot, message.chat.id, msgs.payment)
    bot.send_invoice(
        message.chat.id,
        title='RastreioBot - 6 meses',
        description=
        'Seis meses (183 dias) de rastreio de pacotes internacionais',
        provider_token=STRIPE,
        currency='BRL',
        prices=[types.LabeledPrice(label='Doar R$ 12', amount=1200)],
        start_parameter='doar12',
        invoice_payload='RastreioBot6meses')
    bot.send_invoice(
        message.chat.id,
        title='RastreioBot - 1 ano',
        description='Um ano (366 dias) de rastreio de pacotes internacionais',
        provider_token=STRIPE,
        currency='BRL',
        prices=[types.LabeledPrice(label='Doar R$ 20', amount=2000)],
        start_parameter='doar21',
        invoice_payload='RastreioBot1ano')
コード例 #6
0
 def process_buy_command(self, message):
     if settings.BUY_TOKEN.split(':')[1] == 'TEST':
         self.bot.send_message(message.chat.id, 'Детали платежа')
         self.bot.send_invoice(
             message.chat.id,
             title=f'Карта клиента № {self.card_num}',
             description='Здесь надо указать реквизиты тестовой карты',
             provider_token=settings.BUY_TOKEN,
             currency='rub',
             # is_flexible=False,  # True если конечная цена зависит от способа доставки
             prices=[types.LabeledPrice(label='Руб.', amount=int(self.card_cost) * 100)],
             start_parameter='payment_of_client_card',
             invoice_payload='some-invoice-payload-for-our-internal-use'
         )
コード例 #7
0
ファイル: access_bot.py プロジェクト: cz303/Kassa
def send_payment_message(cid):
    prices = [
        types.LabeledPrice(label='Доступ к каналу Telegram',
                           amount=config.channel_acces_price)
    ]
    return bot.send_invoice(
        cid,
        title='Доступ к каналу Telegram',
        description='Оплатите месячную подписку на канал в Telegram.',
        provider_token=config.PROVIDER_TOKEN,
        currency='RUB',
        prices=prices,
        start_parameter='channel-access',
        invoice_payload='HAPPY FRIDAYS COUPON')
コード例 #8
0
def Donate(message):
    # Telegram payment 
    bot.send_invoice(
        message.chat.id,
        title = 'Поддержать разработчика',
        description = 'Поддержав разработчика, Вы помогаете боту развиваться!',
        invoice_payload = 'something',
        provider_token = '401643678:TEST:bdb72775-f952-465d-9fea-c38185a832af',
        start_parameter = 'support', 
        currency = 'RUB',
        prices = [types.LabeledPrice(label = '100', amount = 100 * 100)] # amount: 100.00 => 10000 => 100 * 100
        )
    # Qiwi & YandexMoney payment 
    keyboard = Pay().paykey(
        sum = 100, 
        id = message.from_user.id, 
        qiwi = config.qiwi, 
        yandex = config.yandex
        )
    bot.send_message(message.chat.id, loc.support[db.Language(message.from_user.id)], reply_markup = keyboard)
コード例 #9
0
ファイル: bot.py プロジェクト: RenatTOP/telegram_bot
def send_buy(query):
    order_list = []
    for prod_id, number in db.get_products_from_cart(query.message.chat.id):
        label, amount, about, url = db.get_product_by_id(prod_id)[0]
        for i in range(0, number):
            order_list.append(types.LabeledPrice(label=label, amount=amount))
    if len(order_list) == 0:
        bot.answer_callback_query(
            callback_query_id=query.id, text='У вас порожній кошик')
        return
    if len(order_list) > 10:
        bot.answer_callback_query(
            callback_query_id=query.id, text='У вас не має бути більше 10 товарів')
        return
    bot.send_invoice(chat_id=query.message.chat.id, title="Чек покупок",
                     description='Ваш чек',
                     provider_token=PAYMENT_TOKEN,
                     start_parameter='params',
                     currency='UAH',
                     prices=order_list,
                     invoice_payload='Good')
    bot.delete_message(chat_id=query.message.chat.id,
                       message_id=query.message.message_id)
コード例 #10
0
ファイル: telegram.py プロジェクト: Necromant24/telegram_bot
def react(call):
    """ Handles all callback buttons """

    time.sleep(1)
    buttons = types.InlineKeyboardMarkup()
    user_info = db_find_value('tg_id', call.message.chat.id)

    if call.data == "rub":
        tariff_id = user_info['tariff']
        msg = messages.rub_text

        # If user has active tariff, send button allowing to extend his current tariff
        # Temporarily off
        if False and tariff_id in ['1', '2', '3', '22', '23']:
            buttons.add(
                types.InlineKeyboardButton(text="Продлить текущий тариф",
                                           callback_data=f"Р-{tariff_id}"))
            msg += f"\n\nВаш текущий тариф: {tariff_id}"
            bot.send_message(call.message.chat.id,
                             msg,
                             parse_mode='Markdown',
                             reply_markup=buttons)
        else:
            bot.send_message(call.message.chat.id, msg, parse_mode='Markdown')

    elif call.data == "yuan":
        bot.send_message(call.message.chat.id,
                         messages.yuan_text,
                         parse_mode='Markdown')
    elif call.data == "install":
        bot.send_message(call.message.chat.id, messages.first_install)
    elif call.data == "other":
        bot.send_message(call.message.chat.id,
                         messages.support,
                         parse_mode='Markdown')
    elif call.data == "market":
        open_dialogue("tg_id", call.message.chat.id)
        bot.send_message(
            call.message.chat.id,
            'Здравствуйте! Укажите, пожалуйста, продукт и вопросы по нему')
    elif call.data == "urgent":
        support(call.message, urgent=True)
    elif call.data == "sup":
        support(call.message)

    # If user rated quality less than 5 and pushed feedback button, open dialogue for one message only
    elif call.data == "get_better":
        update_clients(["tg_id", call.message.chat.id],
                       ["state", "ONE MESSAGE"],
                       ["review_time", f"{int(time.time())}"])
        bot.send_message(call.message.chat.id, messages.get_better)

    elif call.data == "pay":
        buttons.add(
            types.InlineKeyboardButton(text="В рублях или в гривнах",
                                       callback_data="rub"))
        buttons.add(
            types.InlineKeyboardButton(text="В юанях", callback_data="yuan"))
        buttons.add(
            types.InlineKeyboardButton(
                text="\U00002753 Связаться с поддержкой", callback_data="sup"))
        bot.send_message(call.message.chat.id,
                         messages.pay_type,
                         reply_markup=buttons)

    elif call.data in ["1", "2", "3", "4", "5"]:

        # User has already rated
        if get_info("rate", "tg_id", call.message.chat.id) != "0":
            bot.send_message(call.message.chat.id,
                             "Вы уже поставили оценку, спасибо!")
            return

        rating = call.data

        # Ask user to make review if he gave the highest rate
        if rating == "5":
            buttons.add(
                types.InlineKeyboardButton(text="\U0001F49B Оставить отзыв",
                                           url=config.review_link))
            bot.send_message(
                call.message.chat.id,
                "Если вам понравился наш сервис - оставьте отзыв, "
                "и мы предоставим вам 10 дней бесплатного VPN!\n\n"
                "_Когда оставите отзыв свяжитесь с нами для получения бонуса_",
                reply_markup=buttons,
                parse_mode='Markdown')
        # Ask user to write feedback
        else:
            buttons.add(
                types.InlineKeyboardButton(
                    text="\U0001F4A1 Оставить пожелание",
                    callback_data="get_better"))
            bot.send_message(call.message.chat.id,
                             "Мы можем что-то улучшить в обслуживании?",
                             reply_markup=buttons)

        bot.send_message(
            config.group_id,
            f"Клиент `{call.message.chat.id}` поставил вам {rating}",
            parse_mode='Markdown')
        update_clients(["tg_id", call.message.chat.id], ["rate", rating])

    # User chose tariff he wants to buy, send him buttons to choose tariff duration in days (ascending order)
    # Temporarily off
    elif False and re.fullmatch(r'[РЮ]-[123]+', call.data):
        currency, tariff_id = call.data.split('-')
        tariffs_list = get_tariffs(['tariff', tariff_id],
                                   ['currency', currency])
        for price, tariff_id, days, currency, desc in sorted(
                tariffs_list, key=lambda x: int(x[2])):
            # Telegram does not support prices lower than 60 rub.
            if int(price) < 60:
                continue
            # Choose correct form of 'день' word
            if days[-1] == '1':
                day_word = 'день'
            elif days[-1] in '234':
                day_word = 'дня'
            else:
                day_word = 'дней'
            buttons.add(
                types.InlineKeyboardButton(
                    text=f"{days} {day_word}",
                    callback_data=f"{currency}-{tariff_id}-{days}"))
        bot.send_message(
            call.message.chat.id,
            f"Выберите, на сколько дней вы хотите продлить тариф {tariff_id}",
            reply_markup=buttons)

    # User chose tariff duration in days, send him payment button
    # Temporarily off
    elif False and re.fullmatch(r'[РЮ]-[123]+-[0-9]+', call.data):
        currency, tariff_id, days = call.data.split('-')
        specific_tariff = get_tariffs(['tariff', tariff_id],
                                      ['currency', currency],
                                      ['days', days])[0]
        price = int(specific_tariff[0])
        prices = [
            types.LabeledPrice(label=f'Тариф {tariff_id} на {days} дней',
                               amount=price * 100)
        ]
        bot.send_invoice(call.message.chat.id,
                         title=f"Тариф {tariff_id}",
                         description='Plati',
                         provider_token=config.pay_token,
                         currency='rub',
                         prices=prices,
                         start_parameter='payment',
                         invoice_payload='HAPPY FRIDAYS COUPON')
コード例 #11
0
from telebot import types
from Messages import *
from telebot.types import LabeledPrice, ShippingOption
import logging

logging.basicConfig(format=u'%(filename)+13s [ LINE:%(lineno)-4s] %(levelname)-8s [%(asctime)s] %(message)s',
                    level=logging.INFO)


chars = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

access_token = '1235052627:AAFhn3Toc2uotGtyy4InMAkEou-xcD9rPu0'
bot = telebot.TeleBot(access_token)

PRICES = [
    types.LabeledPrice(label='Кейсы до 150р', amount=4900)
]
PRICES1 = [
    types.LabeledPrice(label='Кейсы до 500р', amount=9900)
]
PRICES2 = [
    types.LabeledPrice(label='Кейсы до 700р', amount=12900)
]
PRICES3 = [
    types.LabeledPrice(label='Кейсы до 1500р', amount=29900)
]
PRICES4 = [
    types.LabeledPrice(label='Кейсы до 3000р', amount=99900)
]
PRICES5 = [
    types.LabeledPrice(label='Случайный нож', amount=299900)
コード例 #12
0
ファイル: bot.py プロジェクト: lexa2907/bot_tea
 def pay(message):
     if message.text == '⬅️ Отменить заявку':
         start_bot(message)
     elif message.text == '💳Оплата онлайн':
         user = Users.objects.get(name=message.chat.id)
         user.status = '1'
         user.save(update_fields=['status'])
         price = []
         count = 1
         all_sum = 0
         with open('order_number.json', 'r') as f:
             number = json.load(f)['number']
         number_order = json.dumps({"number": number + 1})
         with open('order_number.json', 'w') as f:
             f.write(number_order)
         text = f'*Заказ № {number}*\n'
         text_admin = f'❗️ *Вам пришел заказ № {number}*\n\n'
         if user.delivery == '🏃 Заберу сам':
             text_admin += f'👤Данные покупателя\n{user.nickname}, ' \
                    f'{user.mobile}\n📦Тип доставки:\n{user.delivery}\n\n-----\n🛒Товары:\n'
         else:
             text_admin += f'👤Данные покупателя\n{user.nickname}, ' \
                    f'{user.mobile}\n📦Тип доставки:\n{user.delivery}\n' \
                    f'адрес доставки:{user.address}\n\n-----\n🛒Товары:\n'
         for i in user.basket_set.all():
             position_sum = i.count * i.price
             all_sum += position_sum
             price.append(
                 types.LabeledPrice(
                     label=f'позиция {count}: {i.count}шт. x {i.price}₽',
                     amount=int(position_sum * 100)))
             text += f'*позиция {count}* - {i.name_product}\n{i.count} x {i.price} = {position_sum} ₽\n'
             text_admin += f'*позиция {count}* - {i.name_product}\n{i.count} x {i.price} = {position_sum} ₽\n'
             count += 1
         if user.delivery == '🚗 Привезти':
             if all_sum < 2000:
                 price.append(
                     types.LabeledPrice(label=f'Доставка 300 ₽',
                                        amount=30000))
                 text += '\n+ _Доставка 300 ₽_'
                 text_admin += f'\n-----\n*Доставка:* 200 ₽\n✅*ОПЛАЧЕНО* {all_sum + 300} ₽'
             else:
                 text_admin += f'\n-----\n✅*ОПЛАЧЕНО* {all_sum} ₽'
         else:
             text_admin += f'\n-----\n✅*ОПЛАЧЕНО* {all_sum} ₽'
         Orders.objects.create(number_order=number,
                               user_order=text_admin)
         user.basket_set.all().delete()
         bot.send_message(message.chat.id,
                          text,
                          parse_mode='markdown',
                          reply_markup=start_menu())
         bot.send_invoice(chat_id=message.chat.id,
                          title=f'Заказ № {number}',
                          description=f'Оплата заказа № {number}',
                          provider_token=PAYMENTS_PROVIDER_TOKEN,
                          currency='RUB',
                          is_flexible=False,
                          prices=price,
                          start_parameter='time-machine-example',
                          invoice_payload='{0}'.format(number))
     elif message.text == '💵Оплата при получении':
         user = Users.objects.get(name=message.chat.id)
         user.status = 'q'
         user.save(update_fields=['status'])
         with open('order_number.json', 'r') as f:
             number = json.load(f)['number']
         text = f'*Заказ № {number}*\n\n'
         keyboard = types.ReplyKeyboardMarkup(True, False)
         keyboard.row('✅ Подтвердить и отправить')
         keyboard.row('⬅️ Отменить заявку')
         all_sum = 0
         for i in user.basket_set.all():
             position_sum = i.count * i.price
             text += f'*{i.name_product}*\n{i.count} x {i.price} = {position_sum} ₽\n'
             all_sum += position_sum
         if user.delivery == '🚗 Привезти':
             if all_sum < 2000:
                 text += '+_Доставка: 300 ₽_'
                 all_sum += 300
         text += f'\n\n*Итого:* {all_sum} ₽'
         bot.send_message(message.chat.id,
                          text,
                          parse_mode='markdown',
                          reply_markup=keyboard)
     else:
         bot.send_message(message.chat.id, 'Выберите способ оплаты')
コード例 #13
0
ファイル: bot.py プロジェクト: Karto4an/shop
name_keyboard_choise_1 = "1st category"
name_keyboard_choise_2 = "2nd category"
name_inlinekeyboard_versionchoise_1 = "Toys"
name_inlinekeyboard_versionchoise_2 = "Sculptures"
name_inlinekeyboard_callback_1 = "invoice_windowshome"
name_inlinekeyboard_callback_2 = "invoice_windowspro"
name_inlinekeyboard_versionchoise_3 = "Arts"
name_inlinekeyboard_versionchoise_4 = "All for art"
name_inlinekeyboard_callback_3 = "invoice_officehome"
name_inlinekeyboard_callback_4 = "invoice_officepro"

price_1_title = "Toy"
price_1_description = "Toy"
price_1_currency = "uah"

price_1 = types.LabeledPrice(label="Toy", amount=10000)

price_2_title = "Sculpture"
price_2_description = "Sculpture"
price_2_currency = "uah"

price_2 = types.LabeledPrice(label="Sculpture", amount=14000)

price_3_title = "Painting"
price_3_description = "Painting"
price_3_currency = "uah"

price_3 = types.LabeledPrice(label="Painting", amount=8000)

price_4_title = "Goods for art"
price_4_description = "Goods for art"
コード例 #14
0
ファイル: botpizza_21.py プロジェクト: shumailaalid/shumaila
def handle_command_adminwindow(message):
    global selected
    global stringList1
    if len(selected) == 1:

        chatid = message.chat.id

        markup = types.InlineKeyboardMarkup(row_width=3)

        markup.add(
            types.InlineKeyboardButton(text="Order",
                                       callback_data="['value', '" + "Order" +
                                       "', '" + "Order" + "']"),
            types.InlineKeyboardButton(text="Opening hours",
                                       callback_data="['value', '" +
                                       "Opening hours" + "', '" + "Hours" +
                                       "']"),
            types.InlineKeyboardButton(text="Menu",
                                       callback_data="['value', '" + "Menu" +
                                       "', '" + "Menu" + "']"))

        temp = {
            chatid: {
                'check': 0,
                'name': '',
                'phone': '',
                'final': '',
                'price': 0,
                'oderid': 0,
                'stringList1': {},
                'cardno': '',
                'email': '',
                'Month': '',
                'Year': '',
                'cvv': ''
            }
        }
        bot.send_message(
            chat_id=message.chat.id,
            text="Hello ! Welcome ! I am your personal virtual assistance",
            reply_markup=markup,
            parse_mode='HTML')
        selected.update(temp)
    else:
        try:
            if selected[message.chat.id]['check'] == 1:
                selected[message.chat.id]['name'] = message.json["text"]
                bot.send_message(message.chat.id,
                                 'Please Enter Your Phone Number')
                selected[message.chat.id]['check'] = 2

            elif selected[message.chat.id]['check'] == 2:
                selected[message.chat.id]['phone'] = str(message.json["text"])
                bot.send_message(message.chat.id, 'Please Enter Your Email')
                selected[message.chat.id]['check'] = 3
            elif selected[message.chat.id]['check'] == 3:
                selected[message.chat.id]['email'] = str(message.json["text"])
                prices = [
                    types.LabeledPrice(
                        label='Pizza Bot',
                        amount=(int)(selected[message.chat.id]['price']) *
                        100),
                ]
                m = bot.send_invoice(
                    chat_id=message.chat.id,
                    title='Pizza',
                    description=selected[message.chat.id]['final'],
                    provider_token=PAYMENTS_PROVIDER_TOKEN,
                    currency='usd',
                    photo_url=
                    'https://media-cdn.tripadvisor.com/media/photo-s/0a/c0/7c/98/best-pizza-in-lahore.jpg',
                    photo_height=None,  # !=0/None or picture won't be shown
                    photo_width=512,
                    photo_size=512,
                    is_flexible=False,  # True If you need to set up Shipping Fee
                    prices=prices,
                    start_parameter='pizza',
                    invoice_payload='HAPPY')
                print(m)
                m = str(m).split("'pay': ", 1)[1].split('}', 1)[0]
                if m == 'True':
                    print("Payment Successfull")
                else:
                    print('ERror in payment')

                ######## Absar add here ###########
                #bot.send_message(message.chat.id,'Please Enter Your Phone Number')
        except:
            chatid = message.chat.id

            markup = types.InlineKeyboardMarkup(row_width=3)

            markup.add(
                types.InlineKeyboardButton(text="Order",
                                           callback_data="['value', '" +
                                           "Order" + "', '" + "Order" + "']"),
                types.InlineKeyboardButton(text="Opening hours",
                                           callback_data="['value', '" +
                                           "Opening hours" + "', '" + "Hours" +
                                           "']"),
                types.InlineKeyboardButton(text="Menu",
                                           callback_data="['value', '" +
                                           "Menu" + "', '" + "Menu" + "']"))

            temp = {
                chatid: {
                    'check': 0,
                    'name': '',
                    'phone': '',
                    'final': '',
                    'price': 0,
                    'oderid': 0,
                    'stringList1': {},
                    'cardno': '',
                    'email': '',
                    'Month': '',
                    'Year': '',
                    'cvv': ''
                }
            }
            bot.send_message(
                chat_id=message.chat.id,
                text="Hello ! Welcome ! I am your personal virtual assistance",
                reply_markup=markup,
                parse_mode='HTML')
            selected.update(temp)
コード例 #15
0
def handle_query(message):
    chat_id = message.message.chat.id
    message_id = message.message.message_id
    data = message.data
    global last_data
    global open_basket
    global menu_id

    # Храним информацию только о 50 последних пользователях
    if len(last_data) > 50:
        last_data = {}
    if len(open_basket) > 50:
        open_basket = {}

    # Проверка что пользователь не нажал две клавиши на одном этапе меню
    if chat_id in last_data.keys() and data == last_data[chat_id]:
        return
    last_data[chat_id] = data
    print(chat_id, ':', data)

    # Список торговых центров
    if data == 'start':
        menu_id[chat_id] = message_id  # Запоминаем номер сообщения с меню
        bot.edit_message_text(chat_id=chat_id,
                              message_id=message_id,
                              text='Список торговых центров',
                              reply_markup=makeKeyboard_TC(DB.TC_list()),
                              parse_mode='HTML')
    # Список фудкортов
    elif data.startswith('{"TC"'):
        menu_id[chat_id] = message_id  # Запоминаем номер сообщения с меню
        TC_name = json.loads(data)['TC']

        bot.edit_message_text(chat_id=chat_id,
                              message_id=message_id,
                              text=TC_name + '\nСписок фудкортов',
                              reply_markup=makeKeyboard_FC(
                                  DB.FC_list(TC_name)),
                              parse_mode='HTML')
    # Список ресторанов
    elif data.startswith('{"FC"'):
        menu_id[chat_id] = message_id  # Запоминаем номер сообщения с меню
        data = json.loads(data)

        TC_name = data['FC'][1]  # TC_name
        FC_name = data['FC'][0]  # FC_name
        if FC_name:
            txt = f'{TC_name}\n{FC_name}\n'
        else:
            txt = f'{TC_name}\n'
        bot.edit_message_text(chat_id=chat_id,
                              message_id=message_id,
                              text=txt + 'Список ресторанов',
                              reply_markup=makeKeyboard_rest(
                                  DB.rest_list(TC_name=TC_name, FC=FC_name)),
                              parse_mode='HTML')

    # Ктегории ресторана
    elif data.startswith('{"rest_id"'):
        menu_id[chat_id] = message_id  # Запоминаем номер сообщения с меню
        data = json.loads(data)
        rest_id = data['rest_id']
        categories = DB.categories_rest(rest_id=rest_id)
        FC = categories["FC"]
        if FC:
            txt = f'{categories["TC_name"]}\n{FC}\n{categories["rest_name"]}\n'
        else:
            txt = f'{categories["TC_name"]}\n{categories["rest_name"]}\n'
        bot.edit_message_text(chat_id=chat_id,
                              message_id=message_id,
                              text=txt + 'Категории',
                              reply_markup=makeKeyboard_categories(categories),
                              parse_mode='HTML')

    # Меню ресторана
    elif data.startswith('{"cat"'):
        menu_id[chat_id] = message_id  # Запоминаем номер сообщения с меню
        data = json.loads(data)
        rest_id = data['cat'][1]
        category = data['cat'][0]
        menu = DB.menu_rest(rest_id=rest_id, category=category)
        rest_name = menu['rest_name']

        photo = data['cat'][2]
        if not photo:
            bot.edit_message_text(chat_id=chat_id,
                                  message_id=message_id,
                                  text=rest_name + '\nМеню\n' + category,
                                  reply_markup=makeKeyboard_menu(menu),
                                  parse_mode='HTML')
        else:
            bot.send_message(chat_id=chat_id,
                             text=rest_name + '\nМеню\n' + category,
                             reply_markup=makeKeyboard_menu(menu),
                             parse_mode='HTML')
            # Удаление старого сообщения
            bot.delete_message(chat_id=chat_id, message_id=message_id)

    # Список товаров (меню рестрана)
    elif data.startswith('{"menu"'):
        menu_id[chat_id] = message_id  # Запоминаем номер сообщения с меню
        data = json.loads(data)
        rest_id = data['menu'][2]
        category = data['menu'][1]
        index = data['menu'][0]

        # Отправка изображния
        menu = DB.menu_rest(rest_id=rest_id, category=category)
        try:
            img = open(menu['menu'][index]['img'], 'rb')
        except:
            print('Image not found:', menu['menu'][index]['img'])
            img = open(error_img_path, 'rb')

        bot.send_photo(chat_id=chat_id,
                       photo=img,
                       reply_markup=makeKeyboard_food(menu, index))

        # Удаление старого сообщения
        bot.delete_message(chat_id=chat_id, message_id=message_id)

        # Если корзина открыта, закрываем
        if chat_id in open_basket.keys() and open_basket[chat_id]:
            bot.delete_message(chat_id=chat_id,
                               message_id=open_basket[chat_id])
            open_basket[chat_id] = False

    # Взаимодействие с товаром
    elif data.startswith('{"food'):
        # '{"food": [rest_id, category, index, action]}'
        data = json.loads(data)['food']
        rest_id = data[0]
        category = data[1]
        index = data[2]
        action = data[3]
        menu = DB.menu_rest(rest_id=rest_id, category=category)

        if '-' in action:
            quantity = int(data[3][1:])
            if quantity == 1:
                return
            quantity -= 1
            bot.edit_message_reply_markup(chat_id=chat_id,
                                          message_id=message_id,
                                          reply_markup=makeKeyboard_food(
                                              menu, index, quantity=quantity))
        elif '+' in action:
            quantity = int(data[3][1:])
            quantity += 1
            bot.edit_message_reply_markup(chat_id=chat_id,
                                          message_id=message_id,
                                          reply_markup=makeKeyboard_food(
                                              menu, index, quantity=quantity))
        elif 'sruct' in action:

            bot.answer_callback_query(callback_query_id=message.id,
                                      show_alert=True,
                                      text='Состав:\n' +
                                      menu['menu'][index]['composition'])
        elif 'add' in action:
            rest_name = menu['rest_name']

            # Проверка если начали добавлять товары другого ресторана
            basket = read_basket(chat_id)
            update_text = ''
            if basket and int(rest_id) != int(basket[0]['rest_id']):
                del_basket(chat_id)
                update_text = 'Корзина обновлена '

            food_name = menu['menu'][index]['name']
            prise = menu['menu'][index]['price']
            quantity = int(data[3][3:])

            add_basket(chat_id, food_name, quantity, prise, rest_id=rest_id)

            bot.answer_callback_query(
                callback_query_id=message.id,
                show_alert=False,
                text=
                f'{update_text}В корзину добавлено {food_name} {quantity} шт.')

            bot.send_message(chat_id=chat_id,
                             text=rest_name + '\nМеню',
                             reply_markup=makeKeyboard_menu(menu),
                             parse_mode='HTML')

            menu_id[
                chat_id] = message_id + 1  # Запоминаем номер сообщения с меню

            # Удаление старого сообщения
            bot.delete_message(chat_id=chat_id, message_id=message_id)

            # Если корзина открыта, закрываем
            if chat_id in open_basket.keys() and open_basket[chat_id]:
                bot.delete_message(chat_id=chat_id,
                                   message_id=open_basket[chat_id])
                open_basket[chat_id] = False

    # Взаимодействие с корзиной
    elif data.startswith('{"basket"'):
        data = json.loads(data)
        action = data['basket']
        if action == 'close':
            bot.delete_message(chat_id=chat_id, message_id=message_id)
            open_basket[chat_id] = False
        elif 'clear' in action:
            del_basket(chat_id)
            bot.answer_callback_query(callback_query_id=message.id,
                                      show_alert=False,
                                      text='Корзина очищена')
            bot.delete_message(chat_id=chat_id, message_id=message_id)
            open_basket[chat_id] = False

        elif 'change' in action:
            basket = read_basket(str(chat_id))
            bot.edit_message_text(chat_id=chat_id,
                                  message_id=message_id,
                                  text='<b>Корзина</b> (изменение)',
                                  reply_markup=makeKeyboard_changeBasket(
                                      basket=basket, chat_id=chat_id),
                                  parse_mode='HTML')
    # Изменение корзины
    elif data.startswith('{"change"'):
        # {"change": ["Шашлык куриный", "+2"]}
        data = json.loads(data)['change']

        # Кнопка сохранить
        if data == 'save':
            save_basket(chat_id)
            items = read_basket(str(chat_id))

            if not items:
                bot.edit_message_text(
                    chat_id=chat_id,
                    message_id=message_id,
                    text='<b>Корзина пуста</b>',
                    reply_markup=makeKeyboard_basket(clear=True),
                    parse_mode='HTML')
                return

            basket_text, amount, basket_info = makeBasket(items)
            rest_id = items[0]['rest_id']
            restaurant = DB.categories_rest(rest_id)
            rest_name = restaurant['rest_name']

            bot.edit_message_text(
                chat_id=chat_id,
                message_id=message_id,
                text=
                f'<b>Корзина</b>\n{rest_name}\n\n<i>{basket_text}</i>\nИтого: <i>{amount} руб.</i>',
                reply_markup=makeKeyboard_basket(),
                parse_mode='HTML')
            return

        # Кнопки - и +
        food_name = data[0]
        action = data[1]
        if '-' in action:
            quantity = int(data[1][1:])
            if quantity == 0:
                return
            quantity = -1
            add_basket(chat_id=chat_id, food_name=food_name, quantity=quantity)
            basket = read_basket(chat_id)
            bot.edit_message_reply_markup(
                chat_id=chat_id,
                message_id=message_id,
                reply_markup=makeKeyboard_changeBasket(basket,
                                                       chat_id=chat_id))
        elif '+' in action:
            quantity = 1
            add_basket(chat_id=chat_id, food_name=food_name, quantity=quantity)
            basket = read_basket(chat_id)
            bot.edit_message_reply_markup(
                chat_id=chat_id,
                message_id=message_id,
                reply_markup=makeKeyboard_changeBasket(basket,
                                                       chat_id=chat_id))
    # Формирование заказа
    elif data == 'pay':
        bot.delete_message(chat_id=chat_id, message_id=message_id)

        markup = types.InlineKeyboardMarkup()
        markup.add(
            types.InlineKeyboardButton(text='Оплатить', pay=True),
            types.InlineKeyboardButton(text='Удалить',
                                       callback_data='del_order_or_receipt'))

        items = read_basket(str(chat_id))
        basket_text, amount, basket_info = makeBasket(items)
        rest_id = items[0]['rest_id']
        restaurant = DB.categories_rest(rest_id)
        rest_name = restaurant['rest_name']
        print(rest_name)

        prices = []
        for i in basket_info:
            food_name = i['food_name']
            quantity = i['quantity']
            price = i['price']
            prices.append(
                types.LabeledPrice(label=food_name + ' ' + str(quantity) +
                                   ' шт.',
                                   amount=price * quantity * 100))
        print(items)
        bot.send_invoice(chat_id=chat_id,
                         title=rest_name,
                         description=basket_text,
                         invoice_payload={"bla": "bla"},
                         provider_token=PROVIDER_TOKEN,
                         start_parameter="mybot",
                         currency="RUB",
                         prices=prices,
                         reply_markup=markup)

        open_basket[chat_id] = False

    # Удаление заказа или чека
    elif data == 'del_order_or_receipt':
        bot.delete_message(chat_id=chat_id, message_id=message_id)
コード例 #16
0
ファイル: main.py プロジェクト: Alexey0109/reddit-telegrambot
from config import DEVTOKEN as report_token
from config import TESTTOKEN as debug_token
from prawcore.exceptions import Forbidden
from telebot import types
import praw
import random
import telebot
import json

#https://surik00.gitbooks.io/aiogram-lessons/content/chapter4.html

token = debug_token
bot = telebot.TeleBot(token)
logger = telebot.TeleBot(report_token)

PRICE = types.LabeledPrice(label='Support us', amount=10000)


@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.message:
        if call.data == 'nsfw_y':
            bot.edit_message_text(chat_id=call.message.chat.id,
                                  message_id=call.message.message_id,
                                  text="Displaying NSFW")
            core.NSFW(str(call.message.chat.id), True)
        if call.data == 'nsfw_n':
            bot.edit_message_text(chat_id=call.message.chat.id,
                                  message_id=call.message.message_id,
                                  text="NSFW is not displaying")
            core.NSFW(str(call.message.chat.id), False)
コード例 #17
0
ファイル: main.py プロジェクト: qwaszx000/pytelegram_bots
token = ""
liqpay_token = ""
bot = telebot.TeleBot(token)

#for example
#also can use db
items = {
	"coffee": {
		"description": "Robust coffee",
	},
	"tea": {
		"description": "Robust tea",
	}
}
prices = {
	"coffee": [types.LabeledPrice(label="coffee", amount=1000)],
	"tea": [types.LabeledPrice(label="tea", amount=2000)],
}


#start
#and help
@bot.message_handler(commands=["start", "help"])
def start_command(message):
	bot.send_message(message.chat.id, "Hi!\nI am demo shop bot!\nYou can see menu using '/menu'")


#main menu
#show items and other
@bot.message_handler(commands=["menu"])
def menu_command(message):