Bot discord w pythonie – discord.py od podstaw #3

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

Chcesz być na bieżąco? Obserwuj nas w google news lub polub nas na Facebooku.