Python examples
Discord bot lyrics example
# these imports are used for this particular lyrics command. the essential import here is aiohttp, which will be used to fetch the lyrics from the API
import textwrap
import urllib
import aiohttp
import datetime
@bot.command(aliases = ['l', 'lyrc', 'lyric']) # adding aliases to the command so they they can be triggered with other names
async def lyrics(ctx, *, search = None):
"""A command to find lyrics easily!"""
if not search: # if user hasnt given an argument, throw a error and come out of the command
embed = discord.Embed(
title = "No search argument!",
description = "You havent entered anything, so i couldnt find lyrics!"
)
return await ctx.reply(embed = embed)
# ctx.reply is available only on discord.py version 1.6.0, if you have a version lower than that use ctx.send
song = urllib.parse.quote(search) # url-encode the song provided so it can be passed on to the API
async with aiohttp.ClientSession() as lyricsSession:
async with lyricsSession.get(f'https://some-random-api.ml/lyrics?title={song}') as jsondata: # define jsondata and fetch from API
if not 300 > jsondata.status >= 200: # if an unexpected HTTP status code is recieved from the website, throw an error and come out of the command
return await ctx.send(f'Recieved poor status code of {jsondata.status}')
lyricsData = await jsondata.json() # load the json data into its json form
error = lyricsData.get('error')
if error: # checking if there is an error recieved by the API, and if there is then throwing an error message and returning out of the command
return await ctx.send(f'Recieved unexpected error: {error}')
songLyrics = lyricsData['lyrics'] # the lyrics
songArtist = lyricsData['author'] # the author's name
songTitle = lyricsData['title'] # the song's title
songThumbnail = lyricsData['thumbnail']['genius'] # the song's picture/thumbnail
# sometimes the song's lyrics can be above 4096 characters, and if it is then we will not be able to send it in one single message on Discord due to the character limit
# this is why we split the song into chunks of 4096 characters and send each part individually
for chunk in textwrap.wrap(songLyrics, 4096, replace_whitespace = False):
embed = discord.Embed(
title = songTitle,
description = chunk,
color = discord.Color.blurple(),
timestamp = datetime.datetime.utcnow()
)
embed.set_thumbnail(url = songThumbnail)
await ctx.send(embed = embed)
Canvas endpoint example
@bot.command()
async def triggered(ctx, member: discord.Member=None):
if not member: # if no member is mentioned
member = ctx.author # the user who ran the command will be the member
async with aiohttp.ClientSession() as trigSession:
async with trigSession.get(f'https://some-random-api.ml/canvas/triggered?avatar={member.avatar_url_as(format="png", size=1024)}') as trigImg: # get users avatar as png with 1024 size
imageData = io.BytesIO(await trigImg.read()) # read the image/bytes
await trigSession.close() # closing the session and;
await ctx.reply(file=discord.File(imageData, 'triggered.gif')) # sending the file
Canvas endpoint example
@bot.command()
async def triggered(ctx, member: discord.Member=None):
if not member: # if no member is mentioned
member = ctx.author # the user who ran the command will be the member
async with aiohttp.ClientSession() as trigSession:
async with trigSession.get(f'https://some-random-api.ml/canvas/triggered?avatar={member.avatar_url_as(format="png", size=1024)}') as trigImg: # get users avatar as png with 1024 size
imageData = io.BytesIO(await trigImg.read()) # read the image/bytes
await trigSession.close() # closing the session and;
await ctx.reply(file=discord.File(imageData, 'triggered.gif')) # sending the file
Canvas endpoint in an embed example
@bot.command()
async def horny(ctx, member: discord.Member = None):
'''Horny license just for u'''
member = member or ctx.author
await ctx.trigger_typing()
async with aiohttp.ClientSession() as session:
async with session.get(
f'https://some-random-api.ml/canvas/horny?avatar={member.avatar_url_as(format="png")}'
) as af:
if 300 > af.status >= 200:
fp = io.BytesIO(await af.read())
file = discord.File(fp, "horny.png")
em = discord.Embed(
title="bonk",
color=0xf1f1f1,
)
em.set_image(url="attachment://horny.png")
await ctx.send(embed=em, file=file)
else:
await ctx.send('No horny :(')
await session.close()