ارسال پیام به تمامی کاربران ربات تلگرام + سورس ربات
با سلام و عرض ادب خدمت تمامی کاربران عزیز
در این آموزش قصد داریم که اطلاعات تمامی کاربران رو در دیتابیس 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¤cy=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); }
برای ارسال پیام به همه کاربران، لازمه از تلگرام ادمین (همون چت آیدی که در سطر ۱۲ وارد کرده اید) پیام رو ارسال کنید . کاربران قادر به مشاهده کیبورد اختصاصی نمی باشند.
سعی شده تا حد امکان کدها خیلی ساده و قابل فهم نوشته باشد . حالا اگر سوالی براتون پیش اومد میتونید تو کامنت بپرسید .
-
مصطفی - 26 آگوست 2017
سلام ، خسته نباشید
تو این آموزش اگه کاربر برای بار اول عضو بشه مشخصاتش تو db ثبت میشه؟؟ و دفعات بعد پیام خوش آمدید براش ارسال میشه؟؟
اگه اینطور هست کدوم کد چک میکنه که کاربر تو db هست؟؟اگه بخام پیامد خوش آمد این مدل باشه : طوبی گستر خوش آمدید یا مصطفی خوش آمدید ، چیکار کنم؟؟
فایل php رو با هر اسمی که ذخیره کنم مشکلی نداره؟؟
اطلاعات کاربران id , name …. از فایل db میتونم ببینم؟؟؟
این فایل db تا چقدر میتونه اطلاعات کاربر دریافت کنه و به هاست معمولی فشار میاره؟؟؟
-
ali - 27 آگوست 2017
سلام
میتونید قبل کاربر در دیتابیس چک کنید که user_id کاربر فعلی اگه وجود داشته باشه مجدد ثبتش نکنه و پیام هم براش ارسال نشه …
این کد نام خانوادگی کاربر رو میگیره : $result[‘message’][‘from’][‘last_name’]
با هر نامی که ذخیره میکنید- هنگام تنظیم کردن setWebhook ادرس دقیق فایل رو بنویسید .
برای نمایش اطلاعات از پلاگین فایرفاکس استفاده کنید و یا اینکه یه پنل تحت وب بنویسید .
اگر فکر میکنید کاربرانتون خیلی زیاد هست از mysql استفاده کنید . کانکت شدن به mysql به شکل زیر می باشد :
$conn = new PDO(“mysql:host=localhost;dbname=telegram”,”root”,”123″); -
مصطفی - 26 آگوست 2017
ی مشکل دیه هس
هر پیام رو ۲بار میفرسه 😐
-
ali - 27 آگوست 2017
احتمالا یه جای از کدتون مشکلی داره که دستور ۲ بار اجرا میشه …
-
امین - 28 نوامبر 2017
با سلام
برای محددودیتی که تلگرام در ارسال پیام با ربات گذاشته چه میشه کرد؟
هر پیام وقتی کاربران تعداد بالا باشند چندین بار ارسال میشه -
ali - 14 دسامبر 2017
سلام
بله میتونید از طریق کرون جاب در هاستتون این کار رو انجام بدید . -
وحید عراقی - 21 مارس 2018
با سلام خدمت شما دوست عزیز که خالصانه این آموزش خوب رو بصورت رایگان در اختیار دیگران گذاشتید
فقط چند تا نکته هست که اگر من رو راهنمایی کنید واقعاً لطف بزرگی در حق من کردید
من زیاد php بلد نیستم ولی میتونم گلیمم رو از آب بیرون بکشم
این رو گفتم که اگر کمکی میکنید بدونید که اگر به صورت جزیی تر و همچین کد رو هم بنویسید برای من که متوجه بشم و از شما ممنونمنکته اول این که وقتی پیامی به کاربران ارسال میشه پیام به هم ریختس یعنی بدون فاصله است میدونم برای این کار که کاربر پیام رو بتونه صحیح ببینه باید از دستور urlencode استفاده بشه این urlncode رو باید کجای این کد ها بذارم؟
نکته دوم اینکه دلیل اینکه برای یک کاربر دو بار پیام میره یا بیشتر بخاطر اینه که هر با کاربر ربات رو پاک کنه و دوباره برگرده به ربات مجدداً سیو میشه در دیتا بایس شما توضیح دادید چیکا باید کرد ولی برای آدم های حرفه ای است و من کامل متوجه نشدم اگه لطف کنید وکد کامل اون رو هم بذارید ممنون میشم از شما
باز هم از شما تشکر میکنم بابت این مطلب کاربردی و قشنگ
-
علی - 23 سپتامبر 2018
سلام
من وقتی میخوام برای تعداد بالای کاربران پیام بفرستم،پیام برای هر کاربر چندین بار ارسال میشه
تو گوگل سرچ کردم و تو پاسخ های شما هم دیدم که باید از کرون جاب استفاده کنم
میشه اطلاعاتیی راج بهش بدید؟میدونم که باهاش میشه یک کاری رو تعریف کرد که تو زمان های مختلف اجرا بشه.
اما من برا اینکه بخوام برای تمامی کاربرا با کرون جاب پیغام ارسال کنم باید چکار کنم؟ -
ali - 10 دسامبر 2018
سلام
باید فایل جداگانه ای ایجاد کنید و دستور حلقه ارسال پیام را در این فایل قرار بدید و در هر بار اجرا کردن به ۲۰ عدد کاربر پیام ارسال کند. آموزش ساخت فایل کرون جاب رو انشاءالله در آموزش زیر قرار خواهیم داد :
کلیک کنید