Lær at opbygge din første bot i Telegram med Python

Forestil dig dette, der er en meddelelsesbot, der sender dig et tilfældigt sødt hundebillede, når du vil, lyder sejt, ikke? Lad os lave en!

Til denne vejledning skal vi bruge Python 3, python-telegram-bot og offentlig API RandomDog .

I slutningen af ​​denne vejledning vil du have en stressaflastende bot, der sender dig søde hundebilleder hver gang du har brug for det, yay!

Kom godt i gang

Før vi begynder at skrive programmet, skal vi generere et token til vores bot. Tokenet er nødvendigt for at få adgang til Telegram API og installere de nødvendige afhængigheder.

1. Opret en ny bot i BotFather

Hvis du vil oprette en bot i Telegram, skal du først "registrere" din bot, før du bruger den. Når vi "registrerer" vores bot, får vi tokenet for at få adgang til Telegram API.

Gå til BotFather (hvis du åbner den på skrivebordet, skal du sørge for at have Telegram-appen), og opret en ny bot ved at sende /newbotkommandoen. Følg trinene, indtil du får brugernavnet og tokenet til din bot. Du kan gå til din bot ved at få adgang til denne URL: //telegram.me/YOUR_BOT_USERNAME og dit token skal se sådan ud.

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

2. Installer biblioteket

Da vi skal bruge et bibliotek til denne vejledning, skal du installere det ved hjælp af denne kommando.

pip3 install python-telegram-bot

Hvis biblioteket er installeret med succes, er vi klar til at gå.

Skriv programmet

Lad os lave vores første bot. Denne bot skal returnere et hundebillede, når vi sender /bopkommandoen. For at være i stand til dette kan vi bruge den offentlige API fra RandomDogfor at hjælpe os med at generere tilfældige hundebilleder.

Arbejdsgangen for vores bot er så enkel som denne:

få adgang til API -> få billedets URL -> send billedet

1. Importer bibliotekerne

Først skal du importere alle de biblioteker, vi har brug for.

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

2. Adgang til API og få billedets URL

Lad os oprette en funktion for at hente URL'en. Ved hjælp af anmodningsbiblioteket kan vi få adgang til API'en og hente json-dataene.

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

Du kan kontrollere json-dataene ved at få adgang til denne URL: //random.dog/woof.jsoni din browser. Du kan se noget lignende på din skærm:

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

Hent billedets URL, da vi har brug for denne parameter for at kunne sende billedet.

image_url = contents['url']

Sæt denne kode ind i en kaldet funktion get_url().

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

3. Send billedet

For at sende en besked / billede har vi brug for to parametre, billedets URL og modtagerens id - dette kan være gruppe-id eller bruger-id.

Vi kan hente billedets URL ved at ringe til vores get_url()funktion.

url = get_url()

Få modtagerens id ved hjælp af denne kode:

chat_id = update.message.chat_id

Når vi har fået billedets URL og modtagerens id, er det tid til at sende beskeden, som er et billede.

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

Pak koden i en kaldet funktion bop, og sørg for, at din kode ser sådan ud:

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

Til sidst skal du oprette en anden funktion kaldet maintil at køre vores program. Glem ikke at ændreYOUR_TOKEN med det token, som vi genererede tidligere i denne tutorial.

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

I slutningen skal din kode se sådan ud:

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. Kør programmet

Fantastisk! Du er færdig med dit første program. Lad os nu kontrollere, om det fungerer. Gem filen, navngiv den main.py, og kør den derefter ved hjælp af denne kommando.

python3 main.py

Gå til din telegram bot ved at åbne denne webadresse: //telegram.me/YOUR_BOT_USERNAME. Send /bopkommandoen. Hvis alt kører perfekt, svarer boten med et tilfældigt hundebillede. Sødt ikke?

Håndteringsfejl

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()

Brug denne kode til at oprette en funktion, der kaldes for get_image_url()at gentage URL'en, indtil vi får den filtypenavn, vi ønsker (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. Rediger din kode

Store! Nu til den sidste del skal du erstatte url = get_url()linjen i bop()funktionen med url = get_image_url(), og din kode skal se sådan ud:

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()

Pæn! Alt skal køre perfekt. Du kan også tjekke min GitHub-konto for at få koden.

Endelig tillykke med afslutningen af ​​denne tutorial, plus at du har en sej Telegram-bot nu.

Efterlad en kommentar, hvis du mener, at der er fejl i min kode eller skrivning, fordi jeg stadig lærer, og jeg vil blive bedre.

Tak og held og lykke med at øve dig! :)