Tanulja meg megépíteni az első botot a Telegramban a Python segítségével

Képzelje el, van egy üzenet bot, amely véletlenszerű aranyos kutyaképet küld Önnek, amikor csak akarja. Készítsünk egyet!

Ehhez az oktatóanyaghoz a Python 3-at, a python-telegram-bot és a nyilvános API RandomDog programot fogjuk használni .

A bemutató végén lesz egy stresszoldó bot, amely minden alkalommal, amikor szüksége van rá, aranyos kutyaképeket küld, igen!

Elkezdeni

Mielőtt elkezdenénk írni a programot, elő kell állítanunk egy tokent a botunkhoz. A token a Telegram API eléréséhez és a szükséges függőségek telepítéséhez szükséges.

1. Hozzon létre egy új botot a BotFather-ben

Ha botot szeretnél készíteni a Telegramban, akkor a használat előtt először „regisztrálnod” kell a botodat. Amikor „regisztráljuk” a botunkat, megkapjuk a tokent, hogy hozzáférjünk a Telegram API-hoz.

Lépjen a BotFather oldalra (ha az asztalon nyitja meg, győződjön meg róla, hogy rendelkezik a Telegram alkalmazással), majd a /newbotparancs elküldésével hozzon létre új botot . Kövesse a lépéseket, amíg meg nem kapja a bot felhasználónevét és tokent. Ehhez az URL-hez hozzáférve a botjához léphet: //telegram.me/YOUR_BOT_USERNAME és a tokenjének így kell kinéznie.

704418931:AAEtcZ*************

2. Telepítse a könyvtárat

Mivel egy könyvtárat fogunk használni ehhez az oktatóanyaghoz, telepítse ezt a parancsot használva.

pip3 install python-telegram-bot

Ha a könyvtár sikeresen telepítve van, akkor jónak tartjuk.

Írja meg a programot

Készítsük el az első botunkat. Ennek a botnak vissza kell adnia a kutya képét, amikor elküldjük a /bopparancsot. Ehhez használhatjuk a RandomDog nyilvános API- játhogy segítsen nekünk véletlenszerű kutyaképeket készíteni.

Botunk munkafolyamata ilyen egyszerű:

érje el az API-t -> szerezze be a kép URL-jét -> küldje el a képet

1. Importálja a könyvtárakat

Először importálja az összes szükséges könyvtárat.

from telegram.ext import Updater, CommandHandler import requests import re

2. Nyissa meg az API-t, és szerezze be a kép URL-jét

Hozzunk létre egy függvényt az URL megszerzéséhez. A request könyvtár segítségével elérhetjük az API-t és megszerezhetjük a json adatait.

contents = requests.get('//random.dog/woof.json').json()

A json adatait //random.dog/woof.jsona böngésző URL-jének elérésével ellenőrizheti . Valami ilyesmit fog látni a képernyőn:

{“url":"//random.dog/*****.JPG"}

Szerezze be a kép URL-jét, mivel erre a paraméterre van szükségünk a kép elküldéséhez.

image_url = contents['url']

Csomagolja be ezt a kódot egy úgynevezett függvénybe get_url().

def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url

3. Küldje el a képet

Üzenet / kép elküldéséhez két paraméterre van szükségünk, a kép URL-jére és a címzett azonosítójára - ez lehet csoport- vagy felhasználói azonosító.

A kép URL-jét a get_url()funkciónk meghívásával kaphatjuk meg .

url = get_url()

A címzett azonosítójának megszerzése a következő kód használatával:

chat_id = update.message.chat_id

Miután megkaptuk a kép URL-jét és a címzett azonosítóját, ideje elküldeni az üzenetet, amely egy kép.

bot.send_photo(chat_id=chat_id, photo=url)

Csomagolja be a kódot egy hívott függvénybe bop, és győződjön meg róla, hogy a kód így néz ki:

def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url)

4. Main program

Végül hozzon létre egy másik függvényt, amelyet maina programunk futtatásához hívnak . Ne felejtsen el változtatniYOUR_TOKEN azzal a tokennel, amelyet korábban ebben az oktatóanyagban készítettünk.

def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

A végén a kódjának így kell kinéznie:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

5. Futtassa a programot

Fantasztikus! Befejezte az első programját. Most ellenőrizzük, hogy működik-e. Mentse a fájlt, nevezze el main.py, majd futtassa ezzel a paranccsal.

python3 main.py

Menj a távirat bot elérésével ezen URL: //telegram.me/YOUR_BOT_USERNAME. Küldje el a /bopparancsot. Ha minden tökéletesen sikerül, a bot egy véletlenszerű képpel válaszol. Aranyos igaz?

Kezelési hibák

Great! Now you have a bot that will send you a cute dog image whenever you want.

There is more! The RandomDogAPI not only generates images, but also videos and GIFs. If we access the API and we get a video or GIF, there is an error and the bot won’t send it to you.

Let’s fix this so the bot will only send a message with an image attachment. If we get a video or GIF then we will call the API again until we get an image.

1. Match the file extension using regex

We are going to use a regex to solve this problem.

To distinguish an image from video or GIF, we can take a look at the file extension. We only need the last part of our URL.

//random.dog/*****.JPG

We need to define, first, what file extensions are allowed in our program.

allowed_extension = ['jpg','jpeg','png']

Then use the regex to extract the file extension from the URL.

file_extension = re.search("([^.]*)$",url).group(1).lower()

Using that code, make a function called get_image_url() to iterate the URL until we get the file extension that we want (jpg,jpeg,png).

def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url

2. Modify your code

Great! Now for the last part, replace the url = get_url() line in the bop() function with url = get_image_url() , and your code should look like this:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url def bop(bot, update): url = get_image_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

Nice! Everything should run perfectly. You can also check out my GitHub account to get the code.

Finally, congratulations for finishing this tutorial, plus you have a cool Telegram bot now.

Please leave a comment if you think there are any errors in my code or writing, because I’m still learning and I want to get better.

Thank you and good luck practicing! :)