PYTHON YORDAMIDA O'Z TELEGRAM BOTIMIZNI YARATAMIZ!
mabrurLirik chekinish
Bugungi kunda botlar biznes uchun ham, o'yin-kulgi uchun ham ko'p funksiyali vositalardan biridir. Shaxsan men ularning oldida ulkan kelajak bo'lishiga ishonaman. Albatta, ushbu maqolani o'qib chiqqandan so'ng, siz katta loyihalarni yaratolmaysiz, ammo qiziqishi bor va boshlashni istayotganlar uchun foydali bo’lishi aniq.
O’rnatish va sozlash
Telegram bot yozish uchun sizga yaxshi kod tahrirlovchisi kerak bo’ladi. JetBrainsning mutlaqo tekin bo’lgan PyCharm tahrirlovchisi maqsadimiz uchun eng yaxshi dasturlardan biri.
Uni bu yerdan yuklab olishingiz mumkin…

Yuklab bo’lib, uni o’rnatayotganingizda add to PATH ga galochka qo’yishni unutmang. Maqsadimizga ancha yaqinlashdik, endi telebot kutubxonasini o’rnatish qoldi holos. Buning uchun buyruqlar satri (cmd)ga murojaat qilishimiz talab etiladi. Uni, WIN + R tugmachalarini bosib, cmd so’zini terib ok tugmachasini bosish orqali ishga tushirishingiz mumkin. U ochilganidan so’ng ushbu satrni yozing:
pip install pytelegrambotapi
Agar barchasi yakunlangan bo’lsa, davom etishimiz mumkin.
Bot Father
Telegram tarmog’idan BotFather ni topamiz va yangi botimizni yaratish uchun /newbot bo’limini tanlaymiz. Keyin esa botga nom va username kiritamiz. E’tibor bering, username bot bilan tugashi kerak!
Ko’rib turganingizdek telegram botimizni boshqarishimiz uchun bizga mahsus api token berdi. O’zingizning tokeningizni esda qolarli biror joyga yozib qo’yishingizni maslahat beraman.
Kod
Barchamiz kutgan onlar keldi. Kod yozishni boshlaymiz. Dastlab PyCharmni ochamiz va new project bo’limini tanlaymiz.
Bu yerda hamma narsani huddi men kabi qilishni maslahat beraman (nom, albatta, o'zgartirilishi mumkin). Projectni yaratgandan so'ng, kodimiz yoziladigan faylni yaratamiz. Sichqonchani projectingiz joylashgan papkaga olib borib, o’ng tugmasini bosing, so'ngra New → Python File ni tanlang. Ajoyib, endi kod yozishni boshlaylik. Telebot kutubxonasini quyidagilar yordamida import qiling:
import telebot
Endi esa bot o’zgaruvchisini yozishimiz kerak. Uning nomini istalgancha yozishingiz mumkin, ammo men adashib ketmaslik uchun bot deb yozib qo’yaman.
bot = telebot.TeleBot('tokeningiz')
Endi, /start komandasi bosilganida botimiz javob qaytarishi kerak bo’lgan @bot.message_handler() dekoratorini yozamiz. Buning uchun qavslar ichiga commands=['start'] buyrug’ini yozamiz. Natijada ushbu kod hosil bo’lishi kerak:
@bot.message_handler(commands=['start'])
Agar hozir botingizni ishga tushirmoqchi bo’lsangiz tabiiyki hech narsa sodir bo’lmaydi. Birinchidan kodning oxiriga biz bot.polling() ni yozishimiz kerak va uning ichiga none_stop=True qiymatini kiritamiz. Undan avval esaif __name__ == '__main__': shartini ham yozib qo'yishimiz kerak. Bu botimiz o’chib qolmasligi uchun va serverda yangi xabar bor yoki yo'qligini tekshirish uchun kerak. Ikkinchidan, botimiz, xabarlarni tekshirsa ham, hali ularga javob bera olmaydi. Keling buni to’g’irlaymiz! Dekoratorimizdan so’ng start_message funksiyasini yozamiz va unga message parametrini kiritamiz (nomini o’zgartirishinigiz mumkin). Endi botning o’zidan xabar jonatishni amalga oshiramiz. Funksiyaga bot.send_message(message.chat.id, ‘Salom, siz /start ni bosdingiz’) deb yozamiz. Sizning kodingiz shunday bo’lishi kerak:
import telebot
bot = telebot.TeleBot('tokeningiz')
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Salom, siz/start ni bosdingiz')
if __name__ == '__main__':
bot.polling(none_stop=True)
Tekshirib ko’ramiz. Buning uchun PyCharm dasturidan Run bo’limini tanlaymiz yoki Alt+Shift+F10 tugmachalarini bosamiz.

Ajoyib, bo’timiz ishlayapti! Endi esa u faqatgina buyruqlarga emas, balki xabarlarga ham javob qaytarishi uchun yangi @bot.message_handler() dekoratorini yasaymiz, qavslar ichiga content_types=['text'] deb yozamiz. Umuman olganda, kontentlarni ko’p turlari mavjud, misol uchun location, photo, audio, sticker… Ammo biz matnga javob yozishimiz kerak. Shuning uchun message parametrini oluvchi send_text funksiyasini yaratmiz. Funksiyaga shart kiritamiz:
@bot.message_handler(content_types=['text'])
def send_text(message):
if message.text == 'Salom':
bot.send_message(message.chat.id, 'Salom, mening yaratuvchim')
elif message.text == 'Xayr':
bot.send_message(message.chat.id, 'Xayr, mening yaratuvchim')
Agar xabar matni "Salom" bo'lsa, bot "Salom, mening yaratuvchim", agar xabar matni "Xayr" bo'lsa, bot "Xayr, mening yaratuvchim" deb javob beradi. Bu yerda hamma narsa aniq deb o'ylayman. Ammo ko'pchilikni qiziqtirgan savol, agar foydalanuvchi "salom" yoki "sAloM" deb yozsa, bu holatda nima qilish kerak? Hammasi juda oddiy! Shartli holatda, message.text dan keyin .lower() funktsiyasini yozing va matnda barcha katta harflarni kichik harflar bilan almashtiring. Endi botimiz nafaqat "salom" ga, balki "sALOm" va hatto "SALOM" ga ham javob beradi.
Kodingiz shunday ko’rinishi kerak:

import telebot
bot = telebot.TeleBot('TOKENINGIZ')
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Salom, siz /start bosdingiz')
@bot.message_handler(content_types=['text'])
def send_text(message):
if message.text.lower() == 'salom':
bot.send_message(message.chat.id, 'Salom, mening yaratuvchim')
elif message.text.lower() == 'xayr':
bot.send_message(message.chat.id, 'Xayr mening yaratuvchim')
if __name__ == '__main__':
bot.polling(none_stop=True)
Ajoyib! Biz matnli xabarlar bilan nima qilishni o’rgandik. Ammo Stiker yuborilsa nima qilishimiz kerak? Barchasi oddiy! Har bir stikerning o’zining id sib or. Uning id sini ikki hil uslub bilan olishimiz mumkin. Birinchisi – mahsus “What’s the sticker id?” boti orqali.
Ikkinchisi esa, oson yo’lni unchalik yoqtirmaydiganlar uchun. Yangi @bot.message_handler() dekoratorini yaratmiz va qavslar ichiga content_types=['sticker'] deb yozamiz. Davomi qiyin emas. Message parametrini qabul qiluvchi funksiya yaratamiz, u yerga esa print(message) deb yozib qo’yamiz. Botni ishga tushuramiz.

Qarang, men botga sticker yuborishim bilan, konsolga u haqida ma’lumotlar kela boshladi. Ma’lum oxirida esa stiker id si ko’rsatilgan (file_id). Keling foydalanuvchi botga "seni yaxshi ko'raman" deya dil izhor qilsa, bot tomonidan stiker yuboriladigan qilamiz. Yangi decorator yaratishimiz kerak emas, shunchaki shartni yozib qo’yamiz. bot.send_message() o’rniga bot.send_sticker() ni, texto’rniga id ni yozib qo’yamiz.

Tabriklayman, hammasi yaxshi ketyapti! Qanday qilib audio, fotosuratlar va geo-joylashuvni tushundingiz degan umiddaman. Endi sizga botni ishga tushirganda ko’rinadigan klaviaturani qanday yaratishni ko'rsatmoqchiman. Keyboard1 o’zgaruvchisini yaratamiz va u yerga telebot.types.ReplyKeyboardMarkup() ni yozamiz. Ushbu funksiya klaviaturani chaqiradi. Keyingi qatorlarni yaratishimiz mumkin, lekin shuni yodda tutingki, ular 12 qatordan oshmasligi kerak! Ularni yaratish uchun keyboard1.row() ni yozamiz. Qavslar ichida o'zingiz xohlagan narsani yozing; shaxsan men "Salom" va "Xayr" deb yozaman. Endi klaviaturani chaqirish uchun, start bosishda jonatiladigan funksiyaga reply_markup=keyboard1 ni yozib qo’yamiz:
keyboard1 = telebot.types.ReplyKeyboardMarkup()
keyboard1.row('Salom', 'Xayr')
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Salom, siz /start ni bosdingiz', reply_markup=keyboard1)
Botni ishga tushiramiz…

Ko’rib turganingizdek, klaviaturalar juda katta. Buni to’g’irlash uchun ReplyKeyboardMarkup() ga Trueni yozib qo’yamiz. Agar foydalanuvchi uni bosishi bilan, g’oyib bo’lishini istasangiz yana bitta Trueqo’shib qo’ying.
keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
Hozircha sizlar bilan ulashmoqchi bo'lgan ma'lumotlarim shular. Davomini tez orada yozib chiqaraman.
Kodning to'liq ko'rinishi:
import telebot
bot = telebot.TeleBot('TOKENINGIZ')
keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
keyboard1.row('Salom', 'Xayr')
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Salom, siz /start ni bosdingiz', reply_markup=keyboard1)
@bot.message_handler(content_types=['text'])
def send_text(message):
if message.text.lower() == 'salom':
bot.send_message(message.chat.id, 'Salom, mening yaratuvchim')
elif message.text.lower() == 'xayr':
bot.send_message(message.chat.id, 'Xayr mening yaratuvchim')
if __name__ == '__main__':
bot.polling(none_stop=True)