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')
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. 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, 'Привет, ты написал мне /start')
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.
2.2.4-rasm. Telegram bot.
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? Endi botimiz nafaqat "salom" ga, balki "sALOm" va hatto "SALOM" ga ham javob beradi.
Kodingiz shunday ko‘rinishi kerak:
2.2.5-rasm. Telegram bot yaratish.
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.
2.2.6-rasm. Telegram bot konsoli.
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.
2.2.7-rasm. Telegram bot yaratish.
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…
2.2.8-rasm. Telegram bot yaratish texnologiyasi.
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 shular! Albatta bu hali yakuni emas, oldinda bizni maqolaning ikkinchi qismi ham kutib turibdi. Navbatdagi maqolamizda botimizni yanada mukammal qilishni o‘rganamiz. Keyingi darslarni o‘tkazib yubormaslik uchun menga obuna bo‘ling va maqolaga like bosishni unutmang.
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)
Do'stlaringiz bilan baham: |