」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Python 機器人中整合 Telegram Stars ⭐️ 付款

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

發佈於2024-09-01
瀏覽:644

今天我將向您展示如何使用 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 上找到完整的原始碼。

版本聲明 本文轉載於:https://dev.to/king_triton/integrating-telegram-stars-payment-in-a-python-bot-3667?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Python 變得強大:輕鬆程式設計的初學者指南
    Python 變得強大:輕鬆程式設計的初學者指南
    Python 是一門強大的程式語言,文法簡單,應用廣泛。安裝 Python 後,可以學習其基本語法,包括變數賦值、資料類型和流程控制。實戰案例中,我們透過蒙特卡羅模擬計算圓周率,展示了 Python 在數值計算中的能力。此外,Python 擁有豐富的函式庫,涵蓋機器學習、資料分析和網路開發等領域,體...
    程式設計 發佈於2024-11-06
  • 如何在沒有 jQuery 的情況下監聽動態建立的元素的事件?
    如何在沒有 jQuery 的情況下監聽動態建立的元素的事件?
    在沒有 jQuery 的情況下監聽動態創建的元素的事件使用外部頁面時,向動態生成的元素添加事件監聽器可能具有挑戰性。在這種情況下,委派事件處理至關重要。 一種方法是使用 event.target 屬性來檢查單擊或觸發的元素是否屬於所需類型。這是一個例子:document.querySelector(...
    程式設計 發佈於2024-11-06
  • 利用 Snipbyte 的高階考勤管理系統優化勞動力效率
    利用 Snipbyte 的高階考勤管理系統優化勞動力效率
    在當今的商業環境中,有效管理員工出勤、輪班和工資單可以決定組織的成功或失敗。準確的考勤追蹤不僅可以確保營運順利進行,還有助於提高生產力。在 Snipbyte,我們專注於提供一流的基於網路的解決方案來增強業務流程,包括我們的高級考勤管理系統。 為什麼選擇Snipbyte的考勤管理系統? 我們的考勤...
    程式設計 發佈於2024-11-06
  • Laravel Auth 路由教程
    Laravel Auth 路由教程
    Laravel auth routes is one of the essential features of the Laravel framework. Using middlewares you can implement different authentication strategies...
    程式設計 發佈於2024-11-06
  • 如何有效地跳到大型文字檔案中的特定行?
    如何有效地跳到大型文字檔案中的特定行?
    優化大型文字檔案中的跳行:另一種方法處理大量不同長度行的文字檔案時,通常效率很低順序讀取每一行以達到特定的行號。問題中提供的程式碼範例說明了這種方法,需要對整個文件進行可能緩慢的迭代。然而,還有一種替代方法可以透過利用計算出的偏移列表來優化跳線。 基於偏移的跳線要克服這項挑戰,需要一種更有效的方法涉...
    程式設計 發佈於2024-11-06
  • 如何在 JavaScript 中檢索 HTML 元素的 CSS 屬性值?
    如何在 JavaScript 中檢索 HTML 元素的 CSS 屬性值?
    在 JavaScript 中取得 HTML 元素的 CSS 屬性值在 Web 開發中,動態操作 CSS 屬性可以增強使用者體驗和介面。使用 JavaScript,存取這些屬性非常簡單。 在您的場景中,CSS 檔案連結到 HTML 頁面,您需要檢索類別名稱為「的 div 的特定屬性(例如顏色)」佈局。...
    程式設計 發佈於2024-11-06
  • PLSQL 中的 DBMS_OUTPUT.PUT_LINE
    PLSQL 中的 DBMS_OUTPUT.PUT_LINE
    在 Oracle PL/SQL 中,列印輸出的方法是使用 DBMS_OUTPUT.PUT_LINE 程序。此程序將文字寫入控制台或輸出緩衝區,如果啟用了 DBMS_OUTPUT,則可以在執行後查看文字。使用方法如下: 首先,在 SQL 環境(如 SQL*Plus 或 Oracle SQL Devel...
    程式設計 發佈於2024-11-06
  • 利用 Python 實現自動化:用程式碼簡化日常任務
    利用 Python 實現自動化:用程式碼簡化日常任務
    介紹 Python 已成為從 Web 開發到資料科學等各種應用程式的首選語言。 Python 真正大放異彩的領域之一是自動化。無論您是希望自動化平凡的任務、簡化工作流程,還是創建強大的腳本來節省時間和精力,Python 的簡單性和多功能性都使其成為完成這項工作的完美工具。 ...
    程式設計 發佈於2024-11-06
  • 如何在 Python 中傳遞參數來應用 Pandas 系列的函數?
    如何在 Python 中傳遞參數來應用 Pandas 系列的函數?
    Python Pandas 中向Series Apply 函數傳遞參數pandas 庫提供了'apply()' 方法將函數應用於Series 的每個元素。然而,舊版的 pandas 不允許向函數傳遞額外的參數。 舊版Pandas 的解決方案:在舊版中處理此限制pandas 中,您可以...
    程式設計 發佈於2024-11-06
  • 如何使用 Java 8 Lambda 以多個欄位有效地對集合進行排序?
    如何使用 Java 8 Lambda 以多個欄位有效地對集合進行排序?
    使用 Java 8 Lambda 對具有多個欄位的集合進行排序提供的排序程式碼似乎不完整,可能不會產生預期的排序順序。讓我們深入研究使用 Java 8 lambda 的更有效率、更全面的方法。 使用 Java 8 lambda 的Java 8 透過提供直覺的 lambda 表達式來簡化清單排序,這些...
    程式設計 發佈於2024-11-06
  • 開發人員如何使用 JavaScript 在 HTML 頁面之間安全地交換資料?
    開發人員如何使用 JavaScript 在 HTML 頁面之間安全地交換資料?
    在JavaScript 中維護HTML 頁面之間的資料完整性在網頁之間傳輸資料時,使用查詢參數的傳統方法(例如「http:/ /localhost/ project/index.html?status=exist") 可能會在URL 中暴露敏感資訊。為了解決這個問題,開發人員尋求安全交換資...
    程式設計 發佈於2024-11-06
  • 夾住! VS 程式碼擴充
    夾住! VS 程式碼擴充
    今天我發布了我的第一個 VS Code 擴展 - Clamp it!此擴充功能可以輕鬆為您的 CSS 程式碼產生固定尺寸。 我之所以這麼做是因為想要提高工作效率。我目前的流程包括訪問線上箝位產生器網站,輸入所需的尺寸,然後將其複製並貼上到我的程式碼中。 我在 ChatGPT 的幫助下做到了。 9...
    程式設計 發佈於2024-11-06
  • 掌握 Java 封裝:帶有範例的綜合指南
    掌握 Java 封裝:帶有範例的綜合指南
    Java 封装详细指南 封装是 Java 中的四个基本 OOP(面向对象编程)原则之一,其他原则包括继承、多态性和抽象。封装是指将数据(属性)和操作该数据(行为)的方法捆绑到单个单元或类中。除了捆绑之外,封装还涉及限制对对象的某些组件的直接访问,这通常是通过访问修饰符.来实现的 在...
    程式設計 發佈於2024-11-06
  • 將本機儲存 API 與 JavaScript 和 React JS 結合使用
    將本機儲存 API 與 JavaScript 和 React JS 結合使用
    JavaScript এবং React এ Local Storage API ব্যবহার সম্পর্কে বিস্তারিত আলোচনা করতে পারবেন? JavaScript এবং React এ Local Storage API ব্যবহার খুব ...
    程式設計 發佈於2024-11-06
  • SAML、OAuth 與 OpenID Connect
    SAML、OAuth 與 OpenID Connect
    这篇文章最初发布在我的博客上。使用以下链接查看原始来源: SAML、OAuth 与 OpenID Connect ...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3