176 lines
No EOL
6 KiB
Python
176 lines
No EOL
6 KiB
Python
import os
|
|
import discord
|
|
import requests
|
|
#from requests import Request, Session
|
|
#from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
|
|
import json
|
|
import random
|
|
from keep_alive import keep_alive
|
|
|
|
client = discord.Client()
|
|
my_secret = os.environ['TOKEN']
|
|
|
|
|
|
# arrays containing answers
|
|
xmasAnswers = ['Happy Chrismis!', 'Its Chrismin!', 'Merry Chrisis!', 'Merry Chrysler!']
|
|
coinflip = ['Heads', 'Not Sonic lol (Tails..)']
|
|
dogTitles = ['Who let the dogs out?', 'woof', 'Whos a good boy!', 'meow', 'Mr. GoodBoy']
|
|
|
|
|
|
## APIs
|
|
# gets a quote from zenquotes.io
|
|
def get_quote():
|
|
response = requests.get('https://zenquotes.io/api/random')
|
|
json_data = json.loads(response.text)
|
|
quote = json_data[0]['q'] + ' -' + json_data[0]['a']
|
|
return(quote)
|
|
|
|
# gets a meme from Huge RedditMemesAPI
|
|
def get_meme():
|
|
response = requests.get('https://memes.blademaker.tv/api?lang=en')
|
|
res = response.json()
|
|
title = res['title']
|
|
ups = res['ups']
|
|
downs = res['downs']
|
|
sub = res['subreddit']
|
|
meme = discord.Embed(title = f'{title}\nSubreddit: {sub}')
|
|
meme.set_image(url = res['image'])
|
|
meme.set_footer(text=f"👍:{ups}")
|
|
return meme
|
|
|
|
# gets a dog from Dog API
|
|
def get_dog():
|
|
response = requests.get('https://dog.ceo/api/breeds/image/random')
|
|
res = response.json()
|
|
dog = discord.Embed(title = random.choice(dogTitles))
|
|
dog.set_image(url = res['message'])
|
|
return dog
|
|
|
|
# crypto API
|
|
# def get_crypto():
|
|
# url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
|
|
# parameters = {
|
|
# 'start':'1',
|
|
# 'limit':'5000',
|
|
# 'convert':'USD'
|
|
# }
|
|
# headers = {
|
|
# 'Accepts': 'application/json',
|
|
# 'X-CMC_PRO_API_KEY': '5c96c638-c66f-4ddb-9c5d-7a77d5d83258',
|
|
# }
|
|
|
|
# session = Session()
|
|
# session.headers.update(headers)
|
|
|
|
# try:
|
|
# response = session.get(url, params=parameters)
|
|
|
|
|
|
# #res = response.json()
|
|
# #name = res['name']
|
|
# #id = res['id']
|
|
# #tags = res['tags']
|
|
# #crypto = discord.Embed(title = f'{id}\nMiniable: {tags}')
|
|
|
|
# json_data = json.loads(response.text)
|
|
# return(json_data)
|
|
# except (ConnectionError, Timeout, TooManyRedirects) as e:
|
|
# return(e)
|
|
|
|
## BOT READY
|
|
@client.event # Register an event
|
|
async def on_ready():
|
|
print('We have logged in as {0.user}'.format(client))
|
|
activity = discord.Game(name = "!help") # sets bot activity
|
|
await client.change_presence(status = discord.Status.online, activity = activity)
|
|
|
|
|
|
## MESSAGE RESPONSES
|
|
# bot senses a message & responds
|
|
@client.event
|
|
async def on_message(message):
|
|
# if message is from bot, return nothing
|
|
if message.author == client.user:
|
|
return
|
|
|
|
# user sends "!hello", bot responds w/ "Hello!"
|
|
if message.content.lower().startswith('!hello'):
|
|
await message.channel.send('Hello!')
|
|
|
|
# user sends "!ping", bot responds w/ "Pong" + bot latency and a gif
|
|
elif message.content.lower().startswith('!ping'):
|
|
await message.channel.send(f'Pong :ping_pong: (Bot latency: **{round(client.latency * 1000)}ms**)')
|
|
await message.channel.send(file=discord.File('resources/pingpong.gif'))
|
|
|
|
# user sends "!coinflip", bot returns result
|
|
elif message.content.lower().startswith("!coinflip"):
|
|
await message.channel.send(random.choice(coinflip))
|
|
|
|
# user sends "!github", bot responds w/ my GitHub profile
|
|
elif message.content.lower().startswith("!github"):
|
|
await message.channel.send('https://github.com/SindreKjelsrud')
|
|
|
|
# someone writes "merry christmas", bot responds w/ legendary vine quote
|
|
elif "merry christmas" in message.content.lower():
|
|
await message.channel.send(random.choice(xmasAnswers) + ':santa:')
|
|
|
|
# user sends "!inspire", bot inspires user
|
|
elif message.content.lower().startswith("!inspire"):
|
|
quote = get_quote()
|
|
await message.channel.send(quote)
|
|
|
|
# user sends "!plsmeme", bot sends meme from random subreddit
|
|
elif message.content.lower().startswith("!plsmeme"):
|
|
meme = get_meme()
|
|
await message.channel.send(embed = meme)
|
|
|
|
# user sends "!plsdog", bot sends picture of dog from Dog API
|
|
elif message.content.lower().startswith("!plsdog"):
|
|
dog = get_dog()
|
|
await message.channel.send(embed = dog)
|
|
|
|
# user sends "!invbot", bot responds w/ invite link for bot
|
|
elif message.content.lower().startswith("!invbot"):
|
|
embedVar = discord.Embed(color=0x7B64FF)
|
|
|
|
embedVar.add_field(name="Bot Invite Link", value="https://discord.com/oauth2/authorize?client_id=921786935662477412&permissions=274881309760&scope=bot", inline=False)
|
|
|
|
await message.channel.send(embed=embedVar)
|
|
|
|
# crypto - *not working*
|
|
# elif message.content.lower().startswith("!crypto"):
|
|
# crypto = get_crypto()
|
|
# await message.channel.send(crypto)
|
|
|
|
|
|
# user sends "!help", bot sends commandsfile
|
|
elif message.content.lower().startswith("!help"):
|
|
embedVar = discord.Embed(title="List of sidBots features/commands:", description="--------------------------------", color=0x7B64FF)
|
|
|
|
embedVar.add_field(name="!help", value="List of commands", inline=False)
|
|
|
|
embedVar.add_field(name="!hello", value="Bot responds with 'Hello!'", inline=False)
|
|
|
|
embedVar.add_field(name="!ping", value="Bot responds with 'Pong!' and botlatency + a gif from Ping Pong The Animation", inline=False)
|
|
|
|
embedVar.add_field(name="!github", value="Flexes github link", inline=False)
|
|
|
|
embedVar.add_field(name="!coinflip", value="Heads or Tails!", inline=False)
|
|
|
|
embedVar.add_field(name="merry christmas", value="Someone writes 'merry christmas' and bot responds w/ legendary vine quote selected from an array", inline=False)
|
|
|
|
embedVar.add_field(name="!inspire", value="Bot inspires user with a quote from zenquotes.io", inline=False)
|
|
|
|
embedVar.add_field(name="!plsmeme", value="Bot supplies with premium memes from subreddits across Reddit from Huge RedditMemesAPI", inline=False)
|
|
|
|
embedVar.add_field(name="!plsdog", value="Bot supplies with pictures of cute doggos across the whole internet through Dog API", inline=False)
|
|
|
|
embedVar.add_field(name="!invbot", value="Bot sends invite link for itself", inline=False)
|
|
|
|
await message.channel.send(embed=embedVar)
|
|
|
|
# keeps bot alive
|
|
keep_alive()
|
|
|
|
# run bot
|
|
client.run(my_secret) |