今天我將向您展示如何使用 Telegram 的內部貨幣 Telegram Stars ⭐️ 在您的機器人中設定付款。
首先,使用 BotFather 創建一個機器人。如果您熟悉此過程,則可以使用自己的測試機器人。在此範例中,我將使用機器人 @repeats_bot.
這是您的專案結構的範例:
TelegramStarsBot (root) |-img/ |-img-X9ptcIuiOMICY0BUQukCpVYS.png |-bot.py |-config.py |-database.py |-.env
import telebot from telebot import types from config import TOKEN from database import init_db, save_payment import os bot = telebot.TeleBot(TOKEN) # Initialize the database init_db() # Function to create a payment keyboard def payment_keyboard(): keyboard = types.InlineKeyboardMarkup() button = types.InlineKeyboardButton(text="Pay 1 XTR", pay=True) keyboard.add(button) return keyboard # Function to create a keyboard with the "Buy Image" button def start_keyboard(): keyboard = types.InlineKeyboardMarkup() button = types.InlineKeyboardButton(text="Buy Image", callback_data="buy_image") keyboard.add(button) return keyboard # /start command handler @bot.message_handler(commands=['start']) def handle_start(message): bot.send_message( message.chat.id, "Welcome! Click the button below to buy an image.", reply_markup=start_keyboard() ) # Handler for the "Buy Image" button press @bot.callback_query_handler(func=lambda call: call.data == "buy_image") def handle_buy_image(call): prices = [types.LabeledPrice(label="XTR", amount=1)] # 1 XTR bot.send_invoice( call.message.chat.id, title="Image Purchase", description="Purchase an image for 1 star!", invoice_payload="image_purchase_payload", provider_token="", # For XTR, this token can be empty currency="XTR", prices=prices, reply_markup=payment_keyboard() ) # Handler for pre-checkout queries @bot.pre_checkout_query_handler(func=lambda query: True) def handle_pre_checkout_query(pre_checkout_query): bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True) # Handler for successful payments @bot.message_handler(content_types=['successful_payment']) def handle_successful_payment(message): user_id = message.from_user.id payment_id = message.successful_payment.provider_payment_charge_id amount = message.successful_payment.total_amount currency = message.successful_payment.currency # Send a purchase confirmation message bot.send_message(message.chat.id, "✅ Payment accepted, please wait for the photo. It will arrive soon!") # Save payment information to the database save_payment(user_id, payment_id, amount, currency) # Send the image photo_path = 'img/img-X9ptcIuiOMICY0BUQukCpVYS.png' if os.path.exists(photo_path): with open(photo_path, 'rb') as photo: bot.send_photo(message.chat.id, photo, caption="?Thank you for your purchase!?") else: bot.send_message(message.chat.id, "Sorry, the image was not found.") # /paysupport command handler @bot.message_handler(commands=['paysupport']) def handle_pay_support(message): bot.send_message( message.chat.id, "Purchasing an image does not imply a refund. " "If you have any questions, please contact us." ) # Start polling bot.polling()
import os from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() # Get values from environment variables TOKEN = os.getenv('TOKEN') DATABASE = os.getenv('DATABASE')
import sqlite3 from config import DATABASE def init_db(): with sqlite3.connect(DATABASE) as conn: cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS payments ( user_id INTEGER, payment_id TEXT, amount INTEGER, currency TEXT, PRIMARY KEY (user_id, payment_id) ) ''') conn.commit() def save_payment(user_id, payment_id, amount, currency): with sqlite3.connect(DATABASE) as conn: cursor = conn.cursor() cursor.execute(''' INSERT INTO payments (user_id, payment_id, amount, currency) VALUES (?, ?, ?, ?) ''', (user_id, payment_id, amount, currency)) conn.commit()
您的機器人現在已設定為透過 Telegram Stars 接受付款,並在成功購買後發送圖像。確保設定檔中的所有設定和資料均正確。
如果您留下反應或評論,我將不勝感激!您也可以在 GitHub 上找到完整的原始碼。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3