ساخت بازی با ربات تلگرام

اوت 20, 2024 127 mins read

تلگرام یک اپلیکیشن پیام‌رسان قدرتمند با ویژگی‌های فراوان است. امروزه کمتر کسی را پیدا می کنید که از تلگرام استفاده نمی کند. ویژگی ها و امکانات بسیار که بر محبوبیت و جذابیت تلگرام نسبت به سایر پیام رسان ها، افزوده است. از جمله ساخت بازی با ربات تلگرام، که شما می‌توانید با استفاده از یک ربات تلگرام و یک صفحه HTML5 بازی خود را در تلگرام به اشتراک بگذارید.

قسمت اصلی این فرآیند صفحه وب HTML5 است که بازی شما را تشکیل می‌دهد، و تلگرام برای اشتراک‌گذاری بازی و ثبت امتیازات بازیکنان استفاده می‌شود. ما از Godot برای بخش HTML5 و از Python برای ربات تلگرام استفاده خواهیم کرد. ربات‌های تلگرام می‌توانند با هر زبان برنامه‌نویسی ساخته شوند، بنابراین استفاده از Python ضروری نیست.

پیشنهاد ویژه: برنامه نویسی بلاکچین

چرا تلگرام منحصر به فرد است؟

برخلاف سایر پلتفرم‌های پیام‌رسان، تلگرام به‌گونه‌ای طراحی شده است که به‌راحتی از ربات‌ها پشتیبانی کند. این اپلیکیشن دارای رابط کاربری ساده‌ای است و روی انواع دستگاه‌ها کار می‌کند. این دستگاه‌ها شامل iOS، اندروید، ویندوز و یا هر پلتفرمی که از نسخه وب پشتیبانی می‌کند، می‌شوند. علاوه بر این، تلگرام مانند واتس‌اپ بیزینس نیست که فقط از یک پلتفرم قابل دسترسی باشد. تلگرام مبتنی بر فضای ابری است، به این معنی که می‌توانید همزمان از دستگاه‌های مختلف به چت‌ها دسترسی داشته باشید. این ویژگی به لطف همگام‌سازی فوری امکان‌پذیر است.

مهم‌ترین نکته این است که این پلتفرم پیام‌رسان دارای یک اکوسیستم گسترده از ربات‌ها است. می‌توانید آن را با ربات‌هایی برای ترجمه، یادآوری‌ها، یا مدیران ایمیل اسپم ادغام کنید. به‌عنوان یک صاحب کسب‌وکار، تلگرام در مدیریت و بازاریابی کسب‌وکار شما بسیار کمک‌کننده خواهد بود. می‌توانید آن را برای اهداف و مقاصد مختلف بازاریابی سفارشی کنید.

تحقیقات نشان داده‌اند که تلگرام نرخ مشاهده 20 درصدی دارد، در حالی که این نرخ برای فیس‌بوک 4 درصد و برای اینستاگرام 3 درصد است. این ویژگی‌ها آن را به یکی از بهترین پلتفرم‌ها برای بازاریابی در شبکه‌های اجتماعی تبدیل کرده‌اند. همچنین می‌توانید از تلگرام به‌عنوان ابزاری داخلی برای ارتباط با کارمندان خود استفاده کنید. همه این ویژگی‌ها عالی هستند، اما باید بدانید چگونه از ربات‌های تلگرام به‌طور موثر استفاده کنید.

ربات تلگرام چیست؟

مانند هر چت‌بات دیگری که در شبکه‌های اجتماعی دیده‌اید، یک ربات تلگرام یک برنامه کوچک است که شما آن را در کانال‌های تلگرام یا کانال‌های عمومی با ویژگی‌های هوش مصنوعی جاسازی می‌کنید. از نظر مفهومی، ربات‌های تلگرام می‌توانند به حساب‌های ویژه‌ای تشبیه شوند که برای ایجاد آن‌ها نیازی به شماره تلفن نیست. آن‌ها طراحی شده‌اند تا تعامل و مکالمه انسانی را شبیه‌سازی کنند. ربات‌های تلگرام می‌توانند آموزش دهند، جستجو کنند، بازی کنند، پخش کنند و با خدمات دیگر ادغام شوند. راهنمای جامع ما را بررسی کنید که به طور عمیق‌تر به معنای چت‌بات‌ها می‌پردازد.

ربات‌ها از یک API ربات استفاده می‌کنند، که یک برنامه کاربردی شخص ثالث از طریق تلگرام است. کاربران می‌توانند با ارسال تصاویر، مکان، داده‌ها، متون، درخواست‌های Inline و دستورات با ربات‌ها تعامل کنند.

پیشنهاد مطالعه: صرافی p2p چیست؟ 

ساخت ربات تلگرام

مرحله 1: ایجاد حساب کاربری در تلگرام و گفتگو با Botfather:

ابتدا، برنامه تلگرام را برای دسکتاپ دانلود کنید. پس از آن، باید با ربات اصلی تلگرام، یعنی Botfather، تعامل کنید.

این نام جذاب به این دلیل است که همه ربات‌های تلگرام از آن نشأت گرفته‌اند. Botfather را در تب جستجو پیدا کنید.

برای دریافت پاسخ، دستور `/start` را در Botfather تایپ کنید. این کار لیستی از دستورات را به شما نمایش می‌دهد. ما اسکرین‌شات‌هایی را ضمیمه کرده‌ایم تا نحوه انجام این فرآیند را به شما نشان دهیم.

ساخت ربات تلگرام

این دستور از شما درخواست می‌کند که یک ربات جدید ایجاد یا ویرایش کنید. اگر شما قصد ایجاد ربات اول خود را دارید، روی `/newbot` کلیک کنید. این مرحله ما را به مرحله دوم می‌رساند.

مرحله 2: ایجاد نام و نام کاربری برای دریافت توکن شما

دستور `/newbot` از شما خواهد خواست که به ربات خود نامی بدهید و یک نام کاربری برای آن انتخاب کنید.

نام، نامی است که مخاطبان شما در گفتگو مشاهده می‌کنند. آن‌ها می‌توانند به ربات از طریق نام کاربری دسترسی پیدا کنند. مناسب است که به ربات یک نام دوستانه دهید که شامل فاصله باشد، به عنوان مثال، “FLTelegram_bot”.

نام کاربری متفاوت است؛ نباید فاصله داشته باشد و باید واژه “bot” به عنوان پسوند داشته باشد. باید بین 5 تا 32 کاراکتر باشد و ممکن است شامل حروف لاتین، اعداد یا زیرخط باشد.

ما به ربات خود نام کاربری “FLTelegram_bot” داده‌ایم.

نحوه ساخت ربات تلگرامی

بعد از ایجاد نام کاربری (که در اینجا مخفی شده است)، شما یک توکن دریافت خواهید کرد. این توکن برای کنترل ربات و ارسال آن به API ربات‌ها لازم است.

توکن را به‌امنیت نگه دارید و به هیچ کس نشان ندهید. برخی افراد ممکن است با ربات شما کارهای عجیب و غریبی انجام دهند. بعداً نیاز خواهید داشت به این توکن.

در صورتی که کسی توکن شما را دزدیده یا آن را از دست دادید، می‌توانید از دستور توکن استفاده کنید تا یک توکن جدید تولید کنید.

مرحله 3: اتصال ربات خود به FlowXO

اولین قدم ایجاد حساب کاربری در FlowXO است. به سراسر پلتفرم جهت جستجو بروید و بر روی آیکون “جدید” (نشان داده شده با یک علامت سبز) در بالای صفحه کلیک کنید. Telegram را به عنوان پلتفرم خود انتخاب کنید.

شما با یک جعبه مانند آنچه در زیر آمده روبرو خواهید شد. نام کاربری خود را وارد کرده و توکنی را که قبلاً از botfather دریافت کرده‌اید، در آن وارد کنید.

ساخت ربات بازی تلگرامی

مرحله 4: آزمایش ربات خود و انتشار آن

پس از انجام مرحله سوم، شما یک تصویر مانند آنچه در زیر نمایش داده شده است، خواهید دید. ربات خود را ذخیره کنید و شروع به ایجاد جریان‌ها (flows) کنید تا با مشتریان خود تعامل داشته باشید.

جریان‌ها (flows) مکالماتی را که ربات با مشتریان شما خواهد داشت، به صورت خودکار اجرا می‌کنند. منطق ایجاد جریان‌ها بسیار ساده است. همه چیز با یک محرک (trigger) شروع می‌شود که شامل عملیات‌های زیادی است که شما نیاز دارید تا انجام دهید.

می‌توانید فیلترهای منطقی به وظایف یا محرک‌های فردی در جریان اضافه کنید که به شما اجازه می‌دهد تا بر اساس داده‌های ارائه شده از وظیفه قبلی، تصمیم بگیرید که اقدام بعدی چه باشد.

در آخر، یک تنظیم اختیاری در botfather وجود دارد که می‌تواند ربات شما را سفارشی کند. این تنظیمات می‌توانند ظاهر ربات شما را به نیازهای کسب‌وکارتان بسط دهند و اطلاعات بیشتری را به کاربران در مورد کارکرد رباتتان ارائه دهند.

تبریک می‌گویم که موفق به ایجاد اولین ربات خود برای تلگرام شدید! اکنون می‌توانید آن را به مشترکان خود معرفی کرده و مشاهده کنید که چگونه با آن تعامل می‌کنند.

می‌توانید تصمیم بگیرید که یک خدمات اجتماعی ایجاد کنید، بازی‌های تک نفره یا چند نفره بسازید، ابزارهای سفارشی ایجاد کنید یا از یک فروشگاه مجازی برای فروش محصولات خود و دریافت پرداخت‌ها از طریق تلگرام استفاده کنید.

پیشنهاد مطالعه: بهترین زبان های برنامه نویسی

کد ربات بازی تلگرامی

همانطور که گفتم، ما از Python استفاده می‌کنیم. به نظر من، بهترین فریم‌ورک پایتون برای ربات‌های تلگرام، کتابخانه `python-telegram-bot` است. این کتابخانه یک نمونه از پیاده‌سازی ربات تلگرام با یک وب‌هوک سفارشی (customwebhook.py) دارد. این دقیقاً همان چیزی است که ما نیاز داریم.

بگذارید کمی توضیح بدهم. این‌ها قسمت‌های اصلی کد هستند که باید تغییر کنند:

  • کلاس `WebhookUpdate` در خط 54
  • تابع `webhook_update` در خط 88
  • مدیریت به‌روزرسانی‌های ربات مانند دستور `/start` در خط 78 و به‌روزرسانی‌های وب‌هوک در خط 88
  • مسیر `/submitpayload` در خط 126

همانطور که می‌بینید، در سرویس ما سه مسیر وجود دارد: telegram، submitpayload و healthcheck.

  • مسیر telegram باید به عنوان URL وب‌هوک برای ربات ما تنظیم شود. تمام به‌روزرسانی‌های تلگرام به این مسیر ارسال می‌شوند.
  • مسیر healthcheck ساده است. فقط یک متن کوچک به عنوان پاسخ دارد تا بدانید که سرویس فعال است.
  • و مسیر submitpayload که به‌روزرسانی‌های سفارشی ما را مدیریت می‌کند. در حال حاضر، این به‌روزرسانی دو ویژگی دارد: user_id و payload، اما ما به هیچ‌کدام از آن‌ها نیازی نداریم. بنابراین، بیایید آن‌ها را تغییر دهیم.
@flask_app.route("/submitpayload", methods=["GET", "POST"]) # type: ignore[misc]
async def custom_updates() -> Response:
 """
 Handle incoming webhook updates by also putting them into the `update_queue` if
 the required parameters were passed correctly.
 """
 try:
 score = int(request.args["score"])
 hash= request.args["hash"]
 except KeyError:
 abort(
 HTTPStatus.BAD_REQUEST,
 "Please pass both `hash` and `score` as query parameters.",
 )
 except ValueError:
 abort(HTTPStatus.BAD_REQUEST, "The `score` must be a string!")
 await application.update_queue.put(WebhookUpdate(user_id=user_id, payload=payload))
 return Response(status=HTTPStatus.OK)

دستور پیش‌فرض start با اطلاعاتی درباره وب‌هوک پاسخ می‌دهد. خب، ما نمی‌خواهیم کاربران ما از این موضوع مطلع شوند. بنابراین، بیایید آن را با یک پاسخ ساده جایگزین کنیم.

برای این کار، می‌توانید کد مربوط به دستور `/start` را به صورت زیر تغییر دهید:

async def start(update: Update, context: CustomContext) -> None:
 await update.message.reply_html("Hello!")

با این تغییر، هنگامی که کاربران دستور `/start` را ارسال می‌کنند، یک پیام خوش‌آمدگویی ساده دریافت خواهند کرد که آن‌ها را برای شروع بازی راهنمایی می‌کند.

برای ارسال بازی از طریق ربات، باید یک handler پیام یا یک handler جستجوی اینلاین داشته باشیم. جستجوهای اینلاین برای این منظور مناسب هستند، زیرا می‌توانند در چت‌هایی که ربات عضو آن‌ها نیست نیز استفاده شوند.

در ادامه، نمونه کدی برای handler جستجوی اینلاین آورده شده است که بازی را ارسال می‌کند:

from telegram import InlineQueryResultGame
from telegram.ext import Updater, InlineQueryHandler, CommandHandler
# توکن ربات خود را جایگزین کنید
TOKEN = 'YOUR_BOT_TOKEN'
def start(update, context):
 update.message.reply_text('سلام! به ربات بازی تلگرام خوش آمدید. برای شروع بازی از دستور /play استفاده کنید.')
def inline_query(update, context):
 query = update.inline_query.query
 results = []
 if query == "game":
 results.append(
 InlineQueryResultGame(
 id="1",
 game_short_name="your_game_short_name"
 )
 )
 context.bot.answer_inline_query(update.inline_query.id, results)
def main():
 updater = Updater(TOKEN, use_context=True)
 dp = updater.dispatcher
 dp.add_handler(CommandHandler("start", start))
 dp.add_handler(InlineQueryHandler(inline_query))
 updater.start_polling()
 updater.idle()
if __name__ == '__main__':
 main()

در این کد:

یک تابع start داریم که پیام خوش‌آمدگویی ساده‌ای را ارسال می‌کند.

یک تابع inline_query داریم که جستجوهای اینلاین را مدیریت می‌کند و در صورت درخواست بازی، بازی را به عنوان نتیجه جستجو ارسال می‌کند.

در تابع main، ربات با استفاده از توکن مشخص شده شروع به کار می‌کند و handlerهای مربوط به دستورات و جستجوهای اینلاین اضافه می‌شوند.

مطمئن شوید که توکن ربات خود و game_short_name را با مقادیر مناسب جایگزین کنید. این کد پایه‌ای برای راه‌اندازی ربات بازی تلگرام شما است.

برای مدیریت دکمه “بازی” که در بازی‌های تلگرام وجود دارد، باید از handler های Callback Query استفاده کنیم. این handler ها به ما امکان می‌دهند تا به کلیک‌های کاربران بر روی دکمه‌های تعاملی در بازی پاسخ دهیم.

در ادامه، کد کامل برای مدیریت دکمه “بازی” و handler Callback Query آورده شده است:

from telegram import InlineQueryResultGame, CallbackQueryHandler
from telegram.ext import Updater, InlineQueryHandler, CommandHandler
# توکن ربات خود را جایگزین کنید
TOKEN = 'YOUR_BOT_TOKEN'
def start(update, context):
 update.message.reply_text('سلام! به ربات بازی تلگرام خوش آمدید. برای شروع بازی از دستور /play استفاده کنید.')
def inline_query(update, context):
 query = update.inline_query.query
 results = []
 if query == "game":
 results.append(
 InlineQueryResultGame(
 id="1",
 game_short_name="your_game_short_name"
 )
 )
 context.bot.answer_inline_query(update.inline_query.id, results)
def button(update, context):
 query = update.callback_query
 query.answer()
 query.edit_message_text(text="بازی شروع شد! موفق باشید!")
def main():
 updater = Updater(TOKEN, use_context=True)
 dp = updater.dispatcher
 dp.add_handler(CommandHandler("start", start))
 dp.add_handler(InlineQueryHandler(inline_query))
 dp.add_handler(CallbackQueryHandler(button))
 updater.start_polling()
 updater.idle()
if __name__ == '__main__':
 main()

در این کد:

تابع start پیام خوش‌آمدگویی ساده‌ای ارسال می‌کند.

تابع inline_query جستجوهای اینلاین را مدیریت می‌کند و بازی را به عنوان نتیجه جستجو ارسال می‌کند.

تابع button به کلیک‌های کاربران بر روی دکمه “بازی” پاسخ می‌دهد. این تابع با استفاده از CallbackQueryHandler مدیریت می‌شود.

اطمینان حاصل کنید که توکن ربات خود و game_short_name را با مقادیر مناسب جایگزین کنید. این کد پایه‌ای برای راه‌اندازی ربات بازی تلگرام شما است و شامل مدیریت دکمه “بازی” نیز می‌باشد.

وقتی کاربر روی دکمه کلیک می‌کند، یک آپدیت به این تابع ارسال می‌شود. اگر داده‌های پرس‌وجو (query data) برابر با نام کوتاه بازی شما باشد، یک شناسه منحصر به فرد ایجاد و در یک پایگاه داده همراه با شناسه تلگرام کاربر، نام کوتاه بازی و inline_message_id ذخیره می‌شود. در ادامه، شما خواهید دید که با این مقادیر چه کاری انجام خواهیم داد.

در زیر نمونه کدی برای مدیریت این فرآیند آورده شده است:

from telegram import InlineQueryResultGame, CallbackQueryHandler
from telegram.ext import Updater, InlineQueryHandler, CommandHandler, CallbackContext
from telegram import Update
import sqlite3
# توکن ربات خود را جایگزین کنید
TOKEN = 'YOUR_BOT_TOKEN'
DATABASE = 'game_bot.db'
def start(update: Update, context: CallbackContext):
 update.message.reply_text('سلام! به ربات بازی تلگرام خوش آمدید. برای شروع بازی از دستور /play استفاده کنید.')
def inline_query(update: Update, context: CallbackContext):
 query = update.inline_query.query
 results = []
 if query == "game":
 results.append(
 InlineQueryResultGame(
 id="1",
 game_short_name="your_game_short_name"
 )
 )
 context.bot.answer_inline_query(update.inline_query.id, results)
def button(update: Update, context: CallbackContext):
 query = update.callback_query
 game_short_name = "your_game_short_name"
 if query.data == game_short_name:
 unique_id = generate_unique_id()
 user_id = query.from_user.id
 inline_message_id = query.inline_message_id
 # ذخیره داده‌ها در پایگاه داده
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute("INSERT INTO game_sessions (unique_id, user_id, game_short_name, inline_message_id) VALUES (?, ?, ?, ?)",
 (unique_id, user_id, game_short_name, inline_message_id))
 conn.commit()
 conn.close()
 query.answer()
 query.edit_message_text(text="بازی شروع شد! موفق باشید!")
def generate_unique_id():
 import uuid
 return str(uuid.uuid4())
def main():
 # ایجاد پایگاه داده در صورت عدم وجود
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute('''CREATE TABLE IF NOT EXISTS game_sessions
 (unique_id TEXT, user_id INTEGER, game_short_name TEXT, inline_message_id TEXT)''')
 conn.commit()
 conn.close()
 updater = Updater(TOKEN

در این کد:

تابع start پیام خوش‌آمدگویی ساده‌ای ارسال می‌کند.

تابع inline_query جستجوهای اینلاین را مدیریت می‌کند و بازی را به عنوان نتیجه جستجو ارسال می‌کند.

تابع button به کلیک‌های کاربران بر روی دکمه “بازی” پاسخ می‌دهد. اگر داده‌های پرس‌وجو برابر با نام کوتاه بازی باشد، یک شناسه منحصر به فرد ایجاد و همراه با شناسه تلگرام کاربر، نام کوتاه بازی و inline_message_id در پایگاه داده ذخیره می‌شود.

مطمئن شوید که توکن ربات خود و game_short_name را با مقادیر مناسب جایگزین کنید. این کد شامل ایجاد و مدیریت پایگاه داده SQLite برای ذخیره داده‌های بازی نیز می‌باشد.

برای ثبت هندلرهای جدید در پایان تابع main، می‌توانید کد خود را به صورت زیر تغییر دهید:

from telegram import InlineQueryResultGame, CallbackQueryHandler
from telegram.ext import Updater, InlineQueryHandler, CommandHandler, CallbackContext
from telegram import Update
import sqlite3
# توکن ربات خود را جایگزین کنید
TOKEN = 'YOUR_BOT_TOKEN'
DATABASE = 'game_bot.db'
def start(update: Update, context: CallbackContext):
 update.message.reply_text('سلام! به ربات بازی تلگرام خوش آمدید. برای شروع بازی از دستور /play استفاده کنید.')
def inline_query(update: Update, context: CallbackContext):
 query = update.inline_query.query
 results = []
 if query == "game":
 results.append(
 InlineQueryResultGame(
 id="1",
 game_short_name="your_game_short_name"
 )
 )
 context.bot.answer_inline_query(update.inline_query.id, results)
def button(update: Update, context: CallbackContext):
 query = update.callback_query
 game_short_name = "your_game_short_name"
 if query.data == game_short_name:
 unique_id = generate_unique_id()
 user_id = query.from_user.id
 inline_message_id = query.inline_message_id
 # ذخیره داده‌ها در پایگاه داده
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute("INSERT INTO game_sessions (unique_id, user_id, game_short_name, inline_message_id) VALUES (?, ?, ?, ?)",
 (unique_id, user_id, game_short_name, inline_message_id))
 conn.commit()
 conn.close()
 query.answer()
 query.edit_message_text(text="بازی

در این کد:

هندلرها در پایان تابع main ثبت شده‌اند.

هندلر دستور start برای ارسال پیام خوش‌آمدگویی استفاده می‌شود.

هندلر InlineQueryHandler برای مدیریت جستجوهای اینلاین استفاده می‌شود.

هندلر CallbackQueryHandler برای مدیریت کلیک‌های دکمه بازی استفاده می‌شود.

این تغییرات به شما کمک می‌کند تا هندلرهای جدید را در جای مناسب ثبت کنید و ربات بازی تلگرام خود را به درستی پیکربندی کنید.

برای تغییر کامل تابع webhook_update، باید مطمئن شویم که به‌روزرسانی‌های وب‌هوک را به‌درستی مدیریت می‌کنیم. در اینجا یک نمونه کد تغییر یافته برای تابع webhook_update آورده شده است که با سایر بخش‌های کد شما هماهنگ باشد:

from flask import Flask, request
from telegram import Update, Bot
from telegram.ext import Dispatcher, CommandHandler, InlineQueryHandler, CallbackQueryHandler
from telegram import InlineQueryResultGame
import sqlite3
# توکن ربات خود را جایگزین کنید
TOKEN = 'YOUR_BOT_TOKEN'
DATABASE = 'game_bot.db'
bot = Bot(token=TOKEN)
app = Flask(__name__)
# ایجاد دیسپچر تلگرام
dispatcher = Dispatcher(bot, None, workers=0)
def start(update, context):
 update.message.reply_text('سلام! به ربات بازی تلگرام خوش آمدید. برای شروع بازی از دستور /play استفاده کنید.')
def inline_query(update, context):
 query = update.inline_query.query
 results = []
 if query == "game":
 results.append(
 InlineQueryResultGame(
 id="1",
 game_short_name="your_game_short_name"
 )
 )
 context.bot.answer_inline_query(update.inline_query.id, results)
def button(update, context):
 query = update.callback_query
 game_short_name = "your_game_short_name"
 if query.data == game_short_name:
 unique_id = generate_unique_id()
 user_id = query.from_user.id
 inline_message_id = query.inline_message_id
 # ذخیره داده‌ها در پایگاه داده
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute("INSERT INTO game_sessions (unique_id, user_id, game_short_name, inline_message_id) VALUES (?, ?, ?, ?)",
 (unique_id, user_id, game_short_name, inline_message_id))
 conn.commit()
 conn.close()
 query.answer()
 query.edit_message_text(text="بازی شروع شد! موفق باشید!")
def generate_unique_id():
 import uuid
 return str(uuid.uuid4())
# تغییر کامل تابع webhook_update
@app.route('/webhook', methods=['POST'])
def webhook_update():
 if request.method == "POST":
 update = Update.de_json(request.get_json(force=True), bot)
 dispatcher.process_update(update)
 return 'ok'
def main():
 # ایجاد پایگاه داده در صورت عدم وجود
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute('''CREATE TABLE IF NOT EXISTS game_sessions
 (unique_id TEXT, user_id INTEGER, game_short_name TEXT, inline_message_id TEXT)''')
 conn.commit()
 conn.close()
 # ثبت هندلرها
 dispatcher.add_handler(CommandHandler("start", start))
 dispatcher.add_handler(InlineQueryHandler(inline_query))
 dispatcher.add_handler(CallbackQueryHandler(button))
 # تنظیم وب‌هوک
 bot.set_webhook("https://your_server_domain/webhook")
if __name__ == '__main__':
 main()
 app.run(port=8443)

در این کد:

تابع webhook_update با استفاده از فریم‌ورک Flask تعریف شده است.

دیسپچر تلگرام ایجاد شده و هندلرها به آن اضافه شده‌اند.

در تابع main، جدول پایگاه داده ایجاد و وب‌هوک تنظیم می‌شود.

Flask به پورت 8443 گوش می‌دهد تا به‌روزرسانی‌های وب‌هوک را دریافت کند.

مطمئن شوید که توکن ربات خود و game_short_name را با مقادیر مناسب جایگزین کنید و آدرس your_server_domain را به آدرس سرور واقعی خود تغییر دهید. این تغییرات باید تابع webhook_update را به‌درستی مدیریت کنند و به ربات تلگرام شما اجازه دهند که به‌روزرسانی‌های وب‌هوک را پردازش کند.

برای تکمیل روند به‌روزرسانی امتیاز بازیکن و ارسال پیام سرویس در صورت شکست رکورد، باید اطلاعات ذخیره‌شده در پایگاه داده را بازیابی کرده و با استفاده از متد bot.set_game_score امتیاز بازیکن را به‌روزرسانی کنیم. همچنین، در صورت شکست رکورد، تلگرام یک پیام سرویس به چت ارسال خواهد کرد.

در ادامه، کد تکمیلی برای به‌روزرسانی امتیاز بازیکن آورده شده است:

from flask import Flask, request
from telegram import Update, Bot, InlineQueryResultGame
from telegram.ext import Dispatcher, CommandHandler, InlineQueryHandler, CallbackQueryHandler
import sqlite3
# توکن ربات خود را جایگزین کنید
TOKEN = 'YOUR_BOT_TOKEN'
DATABASE = 'game_bot.db'
bot = Bot(token=TOKEN)
app = Flask(__name__)
# ایجاد دیسپچر تلگرام
dispatcher = Dispatcher(bot, None, workers=0)
def start(update, context):
 update.message.reply_text('سلام! به ربات بازی تلگرام خوش آمدید. برای شروع بازی از دستور /play استفاده کنید.')
def inline_query(update, context):
 query = update.inline_query.query
 results = []
 if query == "game":
 results.append(
 InlineQueryResultGame(
 id="1",
 game_short_name="your_game_short_name"
 )
 )
 context.bot.answer_inline_query(update.inline_query.id, results)
def button(update, context):
 query = update.callback_query
 game_short_name = "your_game_short_name"
 if query.data == game_short_name:
 unique_id = generate_unique_id()
 user_id = query.from_user.id
 inline_message_id = query.inline_message_id
 # ذخیره داده‌ها در پایگاه داده
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute("INSERT INTO game_sessions (unique_id, user_id, game_short_name, inline_message_id) VALUES (?, ?, ?, ?)",
 (unique_id, user_id, game_short_name, inline_message_id))
 conn.commit()
 conn.close()
 query.answer()
 query.edit_message_text(text="بازی شروع شد! موفق باشید!")
def set_game_score(user_id, score, inline_message_id):
 # به‌روزرسانی امتیاز بازیکن
 bot.set_game_score(user_id=user_id, score=score, inline_message_id=inline_message_id, force=True)
 # بازیابی اطلاعات ذخیره شده
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute("SELECT user_id, game_short_name, inline_message_id FROM game_sessions WHERE user_id=?", (user_id,))
 data = c.fetchone()
 conn.close()
 if data:
 user_id, game_short_name, inline_message_id = data
 # به‌روزرسانی امتیاز و ارسال پیام سرویس در صورت شکست رکورد
 bot.set_game_score(user_id=user_id, score=score, inline_message_id=inline_message_id, force=True)
 bot.send_message(chat_id=user_id, text="شما رکورد جدیدی ثبت کردید!")
def webhook_update():
 if request.method == "POST":
 update = Update.de_json(request.get_json(force=True), bot)
 dispatcher.process_update(update)
 return 'ok'
def main():
 # ایجاد پایگاه داده در صورت عدم وجود
 conn = sqlite3.connect(DATABASE)
 c = conn.cursor()
 c.execute('''CREATE TABLE IF NOT EXISTS game_sessions
 (unique_id TEXT, user_id INTEGER, game_short_name TEXT, inline_message_id TEXT)''')
 conn.commit()
 conn.close()
 # ثبت هندلرها
 dispatcher.add_handler(CommandHandler("start", start))
 dispatcher.add_handler(InlineQueryHandler(inline_query))
 dispatcher.add_handler(CallbackQueryHandler(button))
 # تنظیم وب‌هوک
 bot.set_webhook("https://your_server_domain/webhook")
if __name__ == '__main__':
 main()
 app.run(port=8443)

در این کد:

تابع set_game_score برای به‌روزرسانی امتیاز بازیکن و ارسال پیام سرویس در صورت شکست رکورد تعریف شده است.

در تابع button، اطلاعات بازیکن و بازی در پایگاه داده ذخیره می‌شود.

در تابع webhook_update، به‌روزرسانی‌های وب‌هوک پردازش می‌شوند.

تابع main برای ایجاد پایگاه داده، ثبت هندلرها و تنظیم وب‌هوک تعریف شده است.

مطمئن شوید که توکن ربات خود و game_short_name را با مقادیر مناسب جایگزین کنید و آدرس your_server_domain را به آدرس سرور واقعی خود تغییر دهید. این تغییرات باید به‌روزرسانی امتیاز بازیکن و ارسال پیام سرویس در صورت شکست رکورد را به‌درستی مدیریت کنند.

اگر تجربه‌ای در توسعه وب‌سایت‌های Flask و ربات‌های تلگرام دارید، باقی کارها را می‌دانید!

تنظیم متغیر TOKEN و دیگر موارد ثابت را فراموش نکنید. همچنین باید وب‌هوک ربات را به آدرس API خود تنظیم کنید. نیازمندی‌ها را نصب کرده، فایل را ذخیره کرده و کد را بر روی یک سرور اجرا کنید!

پروژه‌های HTML5 از Godot 4 در حال حاضر نمی‌توانند بر روی macOS و iOS اجرا شوند به دلیل باگ‌های بالادستی مرتبط با SharedArrayBuffer و WebGL 2.0. توصیه می‌شود به جای آن از قابلیت خروجی نیتیو macOS و iOS استفاده کنید، که همچنین باعث بهبود عملکرد می‌شود.

خروجی HTML5 از Godot 3 به طور کلی با مرورگرهای مختلف سازگار‌تر هستند، به خصوص زمانی که از موتور رندرینگ GLES2 (که تنها نیازمند WebGL 1.0 است) استفاده می‌شود.

برای به‌روزرسانی امتیاز بازیکن، از API‌ای که به تازگی ایجاد کردیم استفاده می‌کنیم. می‌توانید در هر جایی از فایل Main.gd از متد eval در JavaScript برای اجرای کد JavaScript استفاده کنید.

JavaScript.eval("fetch('https://YOUR-BOT-HOST/submitpayload?hash' + window.location.search.substring(3) + '&score=%s');" % score)

این خط، تابع fetch را در جاوااسکریپت فراخوانی می‌کند که یک HTTPRequest به API ما ارسال می‌کند.

می‌توانید یک دکمه اضافه کنید و این کد را به سیگنال فشرده شدن آن ارتباط دهید. وقتی بازیکنان روی دکمه کلیک می‌کنند، یک صفحه باز می‌شود تا بازی و امتیاز به اشتراک گذاشته شود.

func _on_Button_pressed():
 JavaScript.eval("TelegramGameProxy.shareScore();")

برای گرفتن خروجی از بازی، وارد تنظیمات ویرایشگر شوید و General>Input Devices>Pointing>Emulate Touch From Mouse را فعال کنید. این باعث می‌شود لمس‌های شما به عنوان کلیک‌های موس شناخته شوند.

برای گرفتن خروجی از بازی، به Project>Export بروید تا منوی Export باز شود. یک پیش‌تنظیم HTML5 اضافه کرده و VRAM Texture Compression/For Mobile را فعال کنید. تغییرات دیگری که نیاز دارید را انجام دهید، سپس بر روی Export Project… کلیک کنید تا از پروژه خود به عنوان WebAssembly و HTML خروجی بگیرید.

در فایل‌های استخراج شده، باید یک فایل HTML داشته باشید. آن را به نام index.html تغییر نام دهید و این اسکریپت را به انتهای تگ <body> اضافه کنید:

<script>
 const hash = window.location.search.substring(3);
 fetch('https://your-api-url/submitpayload', {
 method: 'POST',
 headers: {
 'Content-Type': 'application/json',
 },
 body: JSON.stringify({
 user_id: hash,
 payload: 'score=' + SCORE_VARIABLE, // Replace SCORE_VARIABLE with your actual score variable
 }),
 });
</script>

این کد، هنگام بارگذاری صفحه، هش کاربر را از URL دریافت کرده و با استفاده از fetch یک درخواست POST به آدرس API شما ارسال می‌کند. در این درخواست، شناسه کاربر و امتیاز بازی (SCORE_VARIABLE) به صورت JSON ارسال می‌شوند.

اضافه می‌کند TelegramGameProxy برای به اشتراک گذاری بازی و امتیاز. آخرین مرحله اجرای سرور است. می‌توانید از این اسکریپت پایتون استفاده کنید تا یک وب‌سرور محلی را برای تست فایل صادر شده خود راه‌اندازی کنید. این اسکریپت را در پوشه صادر شده به نام serve.py ذخیره کنید و این دستور را برای اجرای سرور اجرا کنید:

# serve.py
import http.server
import socketserver
PORT = 8000 # شماره پورتی که می‌خواهید استفاده کنید
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
 print(f"در حال سرویس دادن در پورت {PORT}")
 httpd.serve_forever()

این اسکریپت را با نام serve.py در همان پوشه‌ای که فایل index.html صادر شده شما در آن قرار دارد ذخیره کنید. سپس، یک ترمینال یا پنجره دستور را باز کنید، به پوشه صادر شده ناوبری کنید و دستور زیر را برای شروع سرور اجرا کنید:

تبریک می‌گویم! با موفقیت یک بازی کامل برای تلگرام ایجاد کردید. می‌توانید آن را به دوستان خود ارسال کرده و از بازی کردن لذت ببرید.

python3 server.py -n --root . # in some operating systems like Windows, use `python` instead.
Image NewsLetter
Icon primary
Newsletter

در خبرنامه آرتا رسانه عضو شوید

با آخرین اخبار و تخفیف های ما آگاه شوید