ربات اضافه کردن دکمه لایک و آنلایک در زیر پستهای تلگرام

توی این آموزش به مانند همه آموزشهای قبلی از کلاس PHP معرفی شده در موارد پیشین استفاده شده و در اینجا به سبک آموزشهای کلاسیک تکه کدها رو خط به خط توضیح میدم.

کدهای این آموزش بهتون نشون میده چطور دو دکمه اینلاین برای دریافت بازخورد از کاربران زیر هر مطلب اضافه کنید.

شروع...

include("Telegram.php");
// Set the bot TOKEN
$bot_id = "TOKEN";
// Instances the class
$telegram = new Telegram($bot_id);
$text 			   = $telegram->Text();
$chat_id 		   = $telegram->ChatID();
$callback_data     = $telegram->Callback_Data();
$callback_query    = $telegram->Callback_Query();
$callback_chat_id  = $telegram->Callback_ChatID();
$message_id = $telegram->MessageID();

برای شروع کار مثل همیشه فایل Telegram.php به پروژه اضافه میشه. (خط اول)

در خط دوم توکنی که از بات فادر دریافت کردیم رو جایگزین میکنیم.

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

و از خط 4 تا 9 متغیرهای مورد نیاز ساخته و مقدار دهی میشن.

این کارها بارها و بارها توی آموزشهای قبلی توضیح داده شدن و نیاز به تفسیر بیشتری نیست.

بعد از انجام کارهای مقدماتی من یک شرط نوشتم که اگه عبارت test ارسال شد یک متن با عبارت Did You Like This Post?! و دو دکمه YES و NO زیر اون ارسال بشه.

کدهای توضیحات بالا:

if($text == 'test'){
	$option = array( 
		array(
			$telegram->buildInlineKeyboardButton("YES 0","","up",""),
			$telegram->buildInlineKeyboardButton("NO 0","","down","")
		)
	);
	$keyb = $telegram->buildInlineKeyBoard($option);
	$content = array('chat_id' => $chat_id, 'text' => 'Did You Like This Post?!' , 'reply_markup' => $keyb);
	$telegram->sendMessage($content);
}
قبلا ساخت انواع دکمه ها آموزش داده شده - اینجا

بعد از نوشتن این قطعه کد میتونید ربات رو تست کنید و میبینید که دقیقا همین کار رو انجام میده و یه متن حاوی دو دکمه ارسال میشه. مهمترین جای این کدها تابع buildInlineKeyboardButton هستش که من برای هر دکمه یک کلمه کلیدی منحصر به فرد انتخاب کردم و به عنوان پارامتر اینلاین در نظر گرفتم که بعدا با کلیک روی دکمه های اینها ارسال میشن و تصمیمات طبق این دو کلمه کلیدی یعنی up و down گرفته میشه. پس این رو مد نظر قرار بدید حتما.

برای هر دکمه اینلاین یک کلمه کلیدی یکتا باید نوشته بشه.
if ($callback_query !== null && $callback_query != "") {
	$directory = 'counter';
	if (!is_dir($directory))  mkdir($directory);     
	
	$up_file = $directory.'/'.$message_id.'_up.txt';
	$down_file = $directory.'/'.$message_id.'_down.txt';
	if($callback_data == 'up' || $callback_data == 'down'){ // Creatte Counter Files
		if(!file_exists($up_file))
			file_put_contents($up_file,'0');
		if(!file_exists($down_file))
			file_put_contents($down_file,'0');
	}
	$up_value = file_get_contents($up_file);	
	$down_value = file_get_contents($down_file);
	if($callback_data == 'up') {
		file_put_contents($up_file,$up_value+1);
		$like = "YES ".($up_value+1);
		$unlike = "NO ".$down_value;		
		$option = array( 
			array(
				$telegram->buildInlineKeyboardButton($like,"","up",""),
				$telegram->buildInlineKeyboardButton($unlike,"","down","")
			)
		);
		$keyb = $telegram->buildInlineKeyBoard($option);
		$content = array('chat_id' => $callback_chat_id, 'message_id' => $message_id, 'reply_markup' => $keyb);
		$telegram->editMessageReplyMarkup($content);
	}
	if($callback_data == 'down') {
		file_put_contents($down_file,$down_value+1);
		$like = "YES ".$up_value;
		$unlike = "NO ".($down_value+1);		
		$option = array( 
			array(
				$telegram->buildInlineKeyboardButton($like,"","up",""),
				$telegram->buildInlineKeyboardButton($unlike,"","down","")
			)
		);
		$keyb = $telegram->buildInlineKeyBoard($option);
		$content = array('chat_id' => $callback_chat_id, 'message_id' => $message_id, 'reply_markup' => $keyb);
		$telegram->editMessageReplyMarkup($content);
	}	
}

و این هم ما بقی کدها.

خط اول چک میشه که وقتی دیتایی به صورت اینلاین دریافت شد یکسری کارها رو انجام بده. دیتای اینلاین توی این آموزش وقتی ارسال میشه که یا روی دکمه YES کلیک بشه و یا NO.

در خط کدهای بعدی من میام با استفاده از آیدی پیغام ارسالی دو فایل متنی میسازم. یعنی بعد از اینکه عبارت did you like ... ارسال شد تلگرام به این پیغام یک آیدی میده. فرضا 478 که یکتا هستش. من چون از دیتابیس استفاده نمیکنم برای شمارش تعداد لایکها و آنلایکها دو فایل متنی به این شکل همزمان با کلیک بر روی دکمه ها میسازم. 478_up.txt و 478_down.txt

بعد با دستورات بعدی به ازای کلیک بر روی هر دکمه مقدار درون این فایلهای متنی که شروعش 1 هست رو یه پله افزایش میدم. یعنی اگر کاربر بر روی YES کلیک کنه من فایل 478_up.txt رو با دستور file_get_contents باز میکنم، مقدارش رو میخونم، یه دونه بهش اضافه میکنم و دوباره با دستور file_put_contents مقدار جدید رو جایگزین و ذخیره میکنم و آخر سر دکمه های جدید همراه با مقادیر جدید رو با دستور editMessageReplyMarkup طبق کدهای نوشته شده جایگزین دکمه های فعلی پستی که دکمه های زیرش قرار گرفتن میکنم.

از این آموزش میتونید برای اضافه کردن دکمه های دریافت بازخورد برای انواع پستهای تلگرامی (عکس، فیلم، موسیقی و ...) استفاده کنید.

پایان!

کدهای کامل در کانال برای تست و اجرا قرار داده شد.