Initial upload

Warframe arbitration tracking bot.
This commit is contained in:
Emperor 2020-06-10 18:05:05 -04:00
commit 34e58b0c77
No known key found for this signature in database
GPG Key ID: 725765E199BB6A5F
3 changed files with 169 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*.pyc
cogs/warframe.py

158
arbitration.py Normal file
View File

@ -0,0 +1,158 @@
import discord
from discord.ext import commands
import asyncio
import requests
import json
import time
import datetime
from apscheduler.schedulers.asyncio import AsyncIOScheduler
import sys
import os
from discord import Webhook, AsyncWebhookAdapter
import aiohttp
sys.path.append('../')
from config import *
bot = commands.Bot(
command_prefix='!',
allowed_mentions=discord.AllowedMentions(everyone=True, roles=True, users=True))
mtypes = ['Defense', 'Defection','Disruption', 'Excavation', 'Interception', 'Salvage', 'Survival']
factions = ['Corpus', 'Grineer', 'Infested', 'Orokin']
solnodes = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/solNodes.json').json() ## personal node export
CurrentArbi = requests.get('https://10o.io/kuvalog.json').json()[0] ## semlar arbitration data
OldArbi = CurrentArbi
sched = AsyncIOScheduler() # needed cause discord.py uses async
sched.start() # starts scheduler for cron task
@bot.event
async def on_ready():
print('<-><-><-><-><-><-><-><-><-><-><->')
print('<-> Bot Information: ')
print('<-> Name: {}'.format(bot.user))
print('<-> ID: {}'.format(bot.user.id))
print('<-><-><-><-><-><-><-><-><-><-><->')
await bot.change_presence(status=discord.Status.online, activity=discord.Activity(name='Starting up...', type=3))
sched.add_job(arby_post_task, trigger='cron', minute='*', second='20', id='Elite', replace_existing=True) # trigger every minute, works best cus cron
@bot.command(name="reload")
@commands.is_owner()
async def reload(ctx, cog):
extension = cog.title()
cog = 'cogs.'+str(cog)
bot.reload_extension(cog)
cog = bot.get_cog(extension)
print(cog)
reload = discord.Embed(title="Cog Reloaded: {}".format(extension),
colour=discord.Colour(0x900f0f))
for x in cog.get_commands():
reload.add_field(name='{}'.format(x.name), value=' Enabled: {}'.format(x.enabled), inline=True)
await ctx.send(embed=reload)
@bot.command(name="load")
@commands.is_owner()
async def load(ctx, cog):
extension = cog.title()
cog = 'cogs.'+str(cog)
bot.load_extension(cog)
cog = bot.get_cog(extension)
print(cog)
reload = discord.Embed(title="Cog Loaded: {}".format(extension),
colour=discord.Colour(0x900f0f))
for x in cog.get_commands():
reload.add_field(name='{}'.format(x.name), value=' Enabled: {}'.format(x.enabled), inline=True)
await ctx.send(embed=reload)
@bot.command(name="unload")
@commands.is_owner()
async def unload(ctx, cog):
extension = cog.title()
cog = 'cogs.'+str(cog)
bot.unload_extension(cog)
cog = bot.get_cog(extension)
print(cog)
reload = discord.Embed(title="Cog Unloaded: {}".format(extension),
colour=discord.Colour(0x900f0f))
await ctx.send(embed=reload)
def request_arby(): ### get updated arbitration data
global CurrentArbi
CurrentArbi = requests.get('https://10o.io/kuvalog.json').json()[0]
CurrentArbi['solnodedata']['type'] = solnodes[CurrentArbi['solnode']]['type']
CurrentArbi['solnodedata']['enemy'] = solnodes[CurrentArbi['solnode']]['enemy']
CurrentArbi['solnodedata']['node'] = solnodes[CurrentArbi['solnode']]['node']
CurrentArbi['solnodedata']['planet'] = solnodes[CurrentArbi['solnode']]['planet']
CurrentArbi['solnodedata']['dark_sector'] = solnodes[CurrentArbi['solnode']]['dark_sector']
CurrentArbi['solnodedata']['tileset'] = solnodes[CurrentArbi['solnode']]['tileset']
if 'bonus' in solnodes[CurrentArbi['solnode']]:
CurrentArbi['solnodedata']['bonus'] = solnodes[CurrentArbi['solnode']]['bonus']
return CurrentArbi
async def arby_post_task():
global OldArbi
global CurrentArbi
CurrentArbi = request_arby()
prescensetime = datetime.datetime.fromisoformat(CurrentArbi['end'][:-1]) - datetime.datetime.utcnow()
prescensetime = prescensetime.seconds//60
await bot.change_presence(status=discord.Status.online, activity=discord.Activity(name=CurrentArbi['solnodedata']['enemy']+' - '+CurrentArbi['solnodedata']['type']+' on '+CurrentArbi['solnodedata']['node']+' ~ '+str(prescensetime)+' minutes remaining.', type=3))
if request_arby() == OldArbi: ## prevents duplicate posting
pass
else:
guild = bot.get_guild(guildid)
content = '' # prepares empty string, final string will post with multiple mentions
# ~~ Factions
for y in factions:
if y in CurrentArbi['solnodedata']['enemy']:
try:
role = discord.utils.get(guild.roles, name=str(y))
content+=' '+role.mention
except:
pass
## ~~ Mission types
for y in mtypes:
if y in CurrentArbi['solnodedata']['type']:
try:
role = discord.utils.get(guild.roles, name=str(y))
content+=' '+role.mention
except:
pass
for f in factions:
if f in CurrentArbi['solnodedata']['enemy']:
try:
role = discord.utils.get(guild.roles, name=str(f)+' '+str(y))
content+=' '+role.mention
except:
pass
# ~~ Dark sector bonus
x = ''
if CurrentArbi['solnodedata']['dark_sector'] == True:
x = 'Dark Sector (+{})'.format(CurrentArbi['solnodedata']['bonus'])
# ~~ Node mentions
try:
role = discord.utils.get(guild.roles, name=str(CurrentArbi['solnodedata']['node']))
content+=' '+role.mention
arb = discord.Embed(title=CurrentArbi['solnodedata']['type'] + " - " + CurrentArbi['solnodedata']['enemy'], ### making discord embed here
description=CurrentArbi['solnodedata']['node']+' ('+CurrentArbi['solnodedata']['planet']+')\n'+x,
colour=discord.Colour(0xf1c40f))
except:
arb = discord.Embed(title=CurrentArbi['solnodedata']['type'] + " - " + CurrentArbi['solnodedata']['enemy'], ### making discord embed here
description=CurrentArbi['solnodedata']['node']+' ('+CurrentArbi['solnodedata']['planet']+')\n'+x,
colour=discord.Colour(0x900f0f))
arb.set_thumbnail(url='https://i.imgur.com/2Lyw9yo.png')
arb.set_footer(text=CurrentArbi['solnodedata']['tileset'])
async with aiohttp.ClientSession() as session:
webhook = Webhook.from_url(arbyhook, adapter=AsyncWebhookAdapter(session))
await webhook.send(username="Arbitration", avatar_url='https://cdn.discordapp.com/avatars/705812867781492777/0f0d8efa6759afa9d2bb2618d59dd306.png?size=128',content=content, embed=arb) ### sending embed to channel
OldArbi = request_arby() ### setting old arbi to the one that was just posted, so it doesnt send duplicate
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, CommandNotFound):
pass
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.CommandNotFound):
pass
bot.run(token, bot=True, reconnect=True)

8
config.py Normal file
View File

@ -0,0 +1,8 @@
# config.py:
### bot token
token = ""
### guild (id) to get roles from
guildid =
## webhook url to post current arbitration
arbyhook = ''