Dzisiaj coś bardziej praktycznego, request do api z prośbą o URL obrazka, wysłanie linku do zdjęcia (discord automatycznie pokazuje zdjęcie) po wykonaniu komendy.
Zaczynamy standardowo od dekoratora dla komend oraz rozpoczęcia funkcji. W argumencie mamy kontekst żebyśmy mogli użyć jego metody send, która odpowiada na ten sam kanał, na którym komenda została wykonana.
@bot.command()
async def nazwa_komendy(ctx):
Teraz pora na request do api, użyję do tego popularnej biblioteki pythona – requests. Obrazy będę brał z mojego api, ivall.pl/memy. Api zwraca jsona, który zawiera klucz url, którego wartością jest link do zdjęcia.
Bibliotekę requests instalujemy poprzez polecenie
pip install requests
a importujemy dodając po prostu
import requests
Okej, mamy już bibliotekę do requestów zaimportowaną, api przygotowane, więc wykonujemy request i pobieramy z niego wartość klucza url.
r = requests.get('https://ivall.pl/memy')
Okej, co tutaj się właściwie dzieje? Wykonujemy request o metodzie get na adres https://ivall.pl/memy, po czym przypisujemy zmiennej r obiekt klasy Response (zawiera ona odpowiedź od strony).
Teraz musimy jakoś uzyskać naszego jsona ze strony, możemy to zrobić bardzo łatwo używając metody json.
json_data = r.json()
Mamy już całego jsona, który jest przypisany zmiennej json_data, ale my chcemy tylko link do zdjęcia, weźmiemy go używając klucza.
image_url = json_data['url']
Nasz link do obrazka jest teraz w zmiennej image_url, wystarczy go wysłać na discorda za pomocą kontekstu i jego metody send, o której wspomniałem na początku.
await ctx.send(image_url)
No i zrobione, tak się prezentuje cały bot.
import requests from discord.ext import commands bot = commands.Bot(command_prefix='$') @bot.command() async def nazwa_komendy(ctx): r = requests.get('https://ivall.pl/memy') json_data = r.json() image_url = json_data['url'] await ctx.send(image_url) bot.run('TOKEN')