ارسال پیام به تمامی کاربران ربات تلگرام + سورس ربات

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

با سلام و عرض ادب خدمت تمامی کاربران عزیز
در این آموزش قصد داریم که اطلاعات تمامی کاربران رو در دیتابیس sqlite ذخیره کنیم، تا هم آمار کاربران ربات رو داشته باشیم و هم بتوانیم به تمامی کاربران پیام ارسال کنیم .
ابتدا یک ربات در تلگرام ایجاد کنید، در صورتی که نیاز به آموزش ساخت دارید به این مطلب مراجعه کنید .

۱- یک دیتابیس با فیلد های (id – user_id – name – last_name – username – date) در sqlite یا mysql ایجاد میکنیم . چون میخوایم با PDO کار کنیم مهم نیست از چه دیتابیسی استفاده میکنید .

CREATE  TABLE "main"."users" 
("id" INTEGER PRIMARY KEY  NOT NULL  UNIQUE ,
 "user_id" VARCHAR, "name" VARCHAR, "last_name" VARCHAR,
 "username" VARCHAR, "date" DATETIME DEFAULT CURRENT_TIMESTAMP)

تیبل users رو در sqlite رو ایجاد کنید . برای مدیریت sqlite بهترین گزینه افزونه فایرفاکس است .

<?php
 
try{
	$conn = new PDO("sqlite:db.sqlite");
	$conn->exec('set names utf8');
	}catch(PDOException $e){
		echo $e->getMessage();
	}
 
    try {
		$insert = $conn->prepare("INSERT INTO `users` ( `user_id`, `name`, `last_name`, `username`) VALUES (:user_id, :name , :last_name , :username)");
	    $insert->execute(array(
	    	':user_id' => '465428445',
	    	':firest_name' => 'tooba',
	    	':last_name' => 'web',
	    	':username' => '@tooba_co',
	    )); 
    } catch(PDOException $e) {
        echo $e->getMessage();                   
    }

در قدم بعد فایل sql رو به همراه index.php در هاستتون آپلود کنید و مطمئن بشید که کوئری insert به درستی کار میکنید .

توضیحات کد بالا :
– ابتدا میایم به sqlite متصل میشیم .
– در سطر ۹ اطلاعاتی رو که ربات تلگرام برامون ارسال میکنه رو به صورت آبجکت دریافت میکنیم . توسط فانکشن objectToArray اطلاعات دریافتی رو به آرایه تبدیل میکنیم .
– در سطر ۱۲ چت آیدی خودتون رو وارد کنید ( برای دریافت چت ایدی میتونید از این ربات استفاده کنید ) و در سطر ۶۸ توکن ربات رو وارد کنید .
– فانکشن sendMessage برای ارسال پیام به کاربر می باشد .

<?php
try{
	$conn = new PDO("sqlite:db.sqlite");
	$conn->exec('set names utf8');
	}catch(PDOException $e){
		echo $e->getMessage();
	}

$string = json_decode(file_get_contents('php://input'));
$result = objectToArray($string);
$user_id = $result['message']['from']['id'];
$admin = '219985226';
$from = $result['message']['from'];
$text = $result['message']['text'];
$users = $conn->query("SELECT * FROM `users`");

$keyboard = array('keyboard' => array(array("تعداد کاربران", "خرید سرور مجازی")),'one_time_keyboard'=>true,'resize_keyboard'=>true);
$keyboard = json_encode($keyboard);


if( $admin != $user_id){

	if($text == '/start'){
	    try {
			$insert = $conn->prepare("INSERT INTO `users` ( `user_id`, `name`, `last_name`, `username`) VALUES (:user_id, :name , :last_name , :username)");
		    $insert->execute(array(
		    	':user_id' => $user_id,
		    	':name' => $from['first_name'],
		    	':last_name' => $from['last_name'],
		    	':username' => $from['username'],
		    ));
			sendMessage("خوش امدید . اطلاعات شما در سیستم ثبت شد ." , $user_id , null);

	    } catch(PDOException $e) {
	        echo $e->getMessage();                   
	    }		
	}

}else{
		if($text == '/start')
			sendMessage("خوش آمدید" , $user_id , $keyboard);
		elseif($text == 'تعداد کاربران')
			sendMessage("تعداد کاربران : ".count($users->fetchAll()) , $user_id , $keyboard);
		elseif($text == 'خرید سرور مجازی')
			sendMessage("https://my.tooba.co/cart.php?gid=3&currency=2" , $user_id , $keyboard);
		else{
			foreach($users->fetchAll(PDO::FETCH_ASSOC) as $value){
				sendMessage($text , $value['user_id'] , $keyboard);
			}			
		}

}


function objectToArray( $object )
{
    if( !is_object( $object ) && !is_array( $object ) ){
        return $object;
    }
    if( is_object( $object ) ){
        $object = get_object_vars( $object );
    }
    return array_map( 'objectToArray', $object );
}


function sendMessage($text , $user_id , $keyboard = null){
	$token = '414354064:AAsgrcHLd3fi4mEErMPP45selX_Zoi2o';
	$key = ($keyboard != null)? $keyboard : '';
	$url = 'https://api.telegram.org/bot'.$token .'/sendMessage?text='.$text.'&chat_id='.$user_id.'&reply_markup='.$key ;
	file_get_contents($url);
}

برای ارسال پیام به همه کاربران، لازمه از تلگرام ادمین (همون چت آیدی که در سطر ۱۲ وارد کرده اید) پیام رو ارسال کنید . کاربران قادر به مشاهده کیبورد اختصاصی نمی باشند.
سعی شده تا حد امکان کدها خیلی ساده و قابل فهم نوشته باشد . حالا اگر سوالی براتون پیش اومد میتونید تو کامنت بپرسید .

  1. مصطفی - 26 آگوست 2017

    سلام ، خسته نباشید

    تو این آموزش اگه کاربر برای بار اول عضو بشه مشخصاتش تو db ثبت میشه؟؟ و دفعات بعد پیام خوش آمدید براش ارسال میشه؟؟
    اگه اینطور هست کدوم کد چک میکنه که کاربر تو db هست؟؟

    اگه بخام پیامد خوش آمد این مدل باشه : طوبی گستر خوش آمدید یا مصطفی خوش آمدید ، چیکار کنم؟؟

    فایل php رو با هر اسمی که ذخیره کنم مشکلی نداره؟؟

    اطلاعات کاربران id , name …. از فایل db میتونم ببینم؟؟؟

    این فایل db تا چقدر میتونه اطلاعات کاربر دریافت کنه و به هاست معمولی فشار میاره؟؟؟

  2. ali - 27 آگوست 2017

    سلام
    میتونید قبل کاربر در دیتابیس چک کنید که user_id کاربر فعلی اگه وجود داشته باشه مجدد ثبتش نکنه و پیام هم براش ارسال نشه …
    این کد نام خانوادگی کاربر رو میگیره : $result[‘message’][‘from’][‘last_name’]
    با هر نامی که ذخیره میکنید- هنگام تنظیم کردن setWebhook ادرس دقیق فایل رو بنویسید .
    برای نمایش اطلاعات از پلاگین فایرفاکس استفاده کنید و یا اینکه یه پنل تحت وب بنویسید .
    اگر فکر میکنید کاربرانتون خیلی زیاد هست از mysql استفاده کنید . کانکت شدن به mysql به شکل زیر می باشد :
    $conn = new PDO(“mysql:host=localhost;dbname=telegram”,”root”,”123″);

  3. مصطفی - 26 آگوست 2017

    ی مشکل دیه هس

    هر پیام رو ۲بار میفرسه 😐

  4. ali - 27 آگوست 2017

    احتمالا یه جای از کدتون مشکلی داره که دستور ۲ بار اجرا میشه …

  5. امین - 28 نوامبر 2017

    با سلام
    برای محددودیتی که تلگرام در ارسال پیام با ربات گذاشته چه میشه کرد؟
    هر پیام وقتی کاربران تعداد بالا باشند چندین بار ارسال میشه

  6. ali - 14 دسامبر 2017

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

  7. وحید عراقی - 21 مارس 2018

    با سلام خدمت شما دوست عزیز که خالصانه این آموزش خوب رو بصورت رایگان در اختیار دیگران گذاشتید
    فقط چند تا نکته هست که اگر من رو راهنمایی کنید واقعاً لطف بزرگی در حق من کردید
    من زیاد php بلد نیستم ولی میتونم گلیمم رو از آب بیرون بکشم
    این رو گفتم که اگر کمکی میکنید بدونید که اگر به صورت جزیی تر و همچین کد رو هم بنویسید برای من که متوجه بشم و از شما ممنونم

    نکته اول این که وقتی پیامی به کاربران ارسال میشه پیام به هم ریختس یعنی بدون فاصله است میدونم برای این کار که کاربر پیام رو بتونه صحیح ببینه باید از دستور urlencode استفاده بشه این urlncode رو باید کجای این کد ها بذارم؟

    نکته دوم اینکه دلیل اینکه برای یک کاربر دو بار پیام میره یا بیشتر بخاطر اینه که هر با کاربر ربات رو پاک کنه و دوباره برگرده به ربات مجدداً سیو میشه در دیتا بایس شما توضیح دادید چیکا باید کرد ولی برای آدم های حرفه ای است و من کامل متوجه نشدم اگه لطف کنید وکد کامل اون رو هم بذارید ممنون میشم از شما

    باز هم از شما تشکر میکنم بابت این مطلب کاربردی و قشنگ

  8. علی - 23 سپتامبر 2018

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

  9. ali - 10 دسامبر 2018

    سلام
    باید فایل جداگانه ای ایجاد کنید و دستور حلقه ارسال پیام را در این فایل قرار بدید و در هر بار اجرا کردن به ۲۰ عدد کاربر پیام ارسال کند. آموزش ساخت فایل کرون جاب رو انشاءالله در آموزش زیر قرار خواهیم داد :
    کلیک کنید


همینک دیدگاه خود را برای ما بنویسید!