首頁  >  文章  >  後端開發  >  在 Python 機器人中整合 Telegram Stars ⭐️ 付款

在 Python 機器人中整合 Telegram Stars ⭐️ 付款

WBOY
WBOY原創
2024-08-27 06:06:02718瀏覽

今天我將向您展示如何使用 Telegram 的內部貨幣 Telegram Stars ⭐️ 在您的機器人中設定付款。

第 1 步:創建機器人

首先,使用 BotFather 創建一個機器人。如果您熟悉此過程,則可以使用自己的測試機器人。在此範例中,我將使用機器人@repeats_bot。

Integrating Telegram Stars ⭐️ Payment in a Python Bot

第 2 步:準備專案結構

這是您的專案結構的範例:

TelegramStarsBot (root)
|-img/
  |-img-X9ptcIuiOMICY0BUQukCpVYS.png
|-bot.py
|-config.py
|-database.py
|-.env

第 3 步:機器人程式碼

機器人.py

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')

資料庫.py

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 付款

  • payment_keyboard 和 start_keyboard 建立用於使用者互動的按鈕。第一個按鈕允許付款,第二個按鈕啟動圖片購買。
  • handle_buy_image 使用 XTR 貨幣建立並發送付款發票。這裡,provider_token 可以為空,因為 XTR 不需要令牌。
  • handle_pre_checkout_query和handle_successful_ payment處理付款驗證和確認流程。
  • 付款成功後,機器人會將影像傳送給用戶,並將付款資訊保存在資料庫中。

使用資料庫

  • 如果 Payments 表不存在,init_db 將建立它。此表儲存有關用戶、付款、金額和貨幣的資訊。
  • save_ payment 將付款資訊儲存到資料庫中。這對於潛在退款和交易報告是必要的。

重要提示

  • 機器人所有者付款:如果機器人所有者嘗試在機器人內進行購買,則購買將無法完成。這可以防止管理員進行詐欺或錯誤購買。
  • 管理星星:星星儲存在 Telegram 機器人中。要查看餘額,請前往 Telegram 中的機器人設置,選擇“管理機器人”,然後按一下“餘額”。在這裡,您可以查看和管理獲得的星星、提取它們或將它們用於廣告。

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Integrating Telegram Stars ⭐️ Payment in a Python Bot

Integrating Telegram Stars ⭐️ Payment in a Python Bot

結論

您的機器人現在已設定為透過 Telegram Stars 接受付款,並在成功購買後發送圖像。確保設定檔中的所有設定和資料都正確。

如果您留下反應或評論,我將不勝感激!您也可以在 GitHub 上找到完整的原始碼。

以上是在 Python 機器人中整合 Telegram Stars ⭐️ 付款的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn