diff --git a/cogs/warframe.py b/cogs/warframe.py deleted file mode 100644 index 3dc02d3..0000000 --- a/cogs/warframe.py +++ /dev/null @@ -1,668 +0,0 @@ -import discord -from discord.ext import commands -import asyncio -import requests -import string -import json -import prettytable -import datetime -import time -import sys -from discord import Webhook, AsyncWebhookAdapter -from apscheduler.schedulers.asyncio import AsyncIOScheduler -import aiohttp -import re - - -sys.path.append('../') -from config import * - - -bot = commands.Bot(command_prefix='!', - description='A Warframe based module.') -CurrentArbi = requests.get('https://10o.io/kuvalog.json').json()[0] ## semlar arbitration data -solNodes = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/solNodes.json').json() ## personal node export -missionTypes = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/missionTypes.json').json() -sortieData = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/sortieData.json').json() -lang = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/languages.json').json() -sched = AsyncIOScheduler() # needed cause discord.py uses async -sched.start() # starts scheduler for cron task -gftla = [] -gftlb = [] -af = [] -bf = [] -inva = [] -invb = [] -redtext = [] -OldBaro = "" -invasionitem = ['Orokin Reactor', 'Orokin Catalyst'] - - -class Warframe(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @commands.command(name='price', description='warframe.market price checker', brief='warframe.market price checker', usage='') - async def price(self, ctx, *args): - mesg = ' '.join(args) - search = mesg.lower() - if 'melee' == search: - search = 'melee riven mod (veiled)' - elif 'melee riven' in search: - search = 'melee riven mod (veiled)' - elif 'rifle' == search: - search = 'rifle riven mod (veiled)' - elif 'rifle riven' in search: - search = 'rifle riven mod (veiled)' - elif 'shotgun' == search: - search = 'shotgun riven mod (veiled)' - elif 'shotgun riven' in search: - search = 'shotgun riven mod (veiled)' - elif 'zaw' == search: - search = 'zaw riven mod (veiled)' - elif 'zaw riven' in search: - search = 'zaw riven mod (veiled)' - elif 'kitgun' == search: - search = 'kitgun riven mod (veiled)' - elif 'kitgun riven' in search: - search = 'kitgun riven mod (veiled)' - elif 'companion riven' in search: - search = 'companion rifle riven mod (veiled)' - item = requests.get('https://api.warframe.market/v1/items/' + search.replace(' ', '_') + '/statistics').json() - image = requests.get('https://api.warframe.market/v1/items/' + search.replace(' ', '_')).json() - item = item['payload']['statistics_closed']['48hours'][-1]['min_price'] - embed = discord.Embed(title='Click for orders', - colour=discord.Colour(0x9013fe), - url='https://warframe.market/items/' + search.replace(' ', '_'), - description=str(int(item))+' Platinum') - embed.set_thumbnail(url='https://warframe.market/static/assets/' + image['payload']['item']['items_in_set'][-1]['icon']) - embed.set_footer(text='Data retrieved from warframe.market', icon_url='https://warframe.market/favicon.png') - await ctx.send(embed=embed) - - @price.error - async def priceerror(self, ctx, error): - embed = discord.Embed(title='Syntax Error', - colour=discord.Colour(0x9013fe), - description='Did you mistype the item name?') - await ctx.send(embed=embed) - - @commands.command(name="specter", description='Specter Scaling Calculator', brief='Specter Scaling Calculator', usage=' ') - async def specter(self, ctx, specter, damage, CurrentLevel, MissionLevel, *args): - damage = damage.title() - specter = specter.title() - primary = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Primary.json').json() - secondary = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Secondary.json').json() - melee = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Melee.json').json() - if damage.isdigit() == False: - for i in primary: - if damage == i['name']: - damage = int(i['totalDamage'])*int(i['multishot']) - fireRate = float(i['fireRate']) - for i in secondary: - if damage == i['name']: - damage = int(i['totalDamage'])*int(i['multishot']) - fireRate = float(i['fireRate']) - for i in melee: - if damage == i['name']: - damage = int(i['totalDamage']) - fireRate = float(i['fireRate']) - warframes = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Warframes.json').json() - try: - MissionLevel = MissionLevel.split('-') - MissionLevel = ((int(MissionLevel[0])+int(MissionLevel[1]))/2) - except: - MissionLevel = MissionLevel[0] - LevelDiff = float(CurrentLevel) - float(MissionLevel) - multi = 1+0.015*(float(LevelDiff))**1.55 - damage = float(multi)*float(damage)*float(fireRate) - for i in warframes: - if specter in i['name']: - if 'old' in args: - HealthMulti = (1 + float(LevelDiff)**1.75 * 0.005) - ShieldMulti = (1 + float(LevelDiff)**2 * 0.0075) - ArmorMulti = (1 + float(LevelDiff)**1.75 * 0.005) - HealthValueOld = int(i['health']) * HealthMulti - ShieldValueOld = int(i['shield']) * ShieldMulti - ArmorValueOld = int(i['armor']) * ArmorMulti - CurrentShieldValue = ShieldValueOld - CurrentHealthValue = HealthValueOld - CurrentArmorValue = ArmorValueOld - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - embed = discord.Embed(title=i['name'], - description='**DPS:** {:,}'.format(int(damage))+'\n**Health:** {:,}'.format(int(CurrentHealthValue))+'\n**Armor:** {:,}'.format(int(CurrentArmorValue))+'\n**Shields:** {:,}'.format(int(CurrentShieldValue))+'\n**DR:** {}%'.format(DamageReduction)+'\n**EHP:** {:,}'.format(int(ehp)), - colour=discord.Colour(0x7ed321)) - embed.set_thumbnail(url='https://raw.githubusercontent.com/empdarkness/warframe-data/master/img/'+i['imageName']) - embed.set_footer(text='This does not take into account damage types.') - await ctx.send(embed=embed) - else: - HealthMultiLow = (1 + float(LevelDiff)**2 * 0.015) - ShieldMultiLow = (1 + float(LevelDiff)**1.75 * 0.02) - ArmorMultiLow = (1 + float(LevelDiff)**1.75 * 0.005) - HealthMultiHigh = (1 + float(LevelDiff)**0.5 * 10.7331) - ShieldMultiHigh = (1 + float(LevelDiff)**0.75 * 1.6) - ArmorMultiHigh = (1 + float(LevelDiff)**0.75 * 0.4) - HealthValueLow = int(i['health']) * HealthMultiLow - ShieldValueLow = int(i['shield']) * ShieldMultiLow - ArmorValueLow = int(i['armor']) * ArmorMultiLow - HealthValueHigh = int(i['health']) * HealthMultiHigh - ShieldValueHigh = int(i['shield']) * ShieldMultiHigh - ArmorValueHigh = int(i['armor']) * ArmorMultiHigh - if int(LevelDiff) <=70: - HealthMulti = HealthMultiLow - ShieldMulti = ShieldMultiLow - ArmorMulti = ArmorMultiLow - CurrentShieldValue = ShieldValueLow - CurrentHealthValue = HealthValueLow - CurrentArmorValue = ArmorValueLow - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - if int(LevelDiff) >=80: - HealthMulti = HealthMultiHigh - ShieldMulti = ShieldMultiHigh - ArmorMulti = ArmorMultiHigh - CurrentShieldValue = ShieldValueHigh - CurrentHealthValue = HealthValueHigh - CurrentArmorValue = ArmorValueHigh - DamageReduction = 0 - ehp = CurrentHealthValue - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - if 70 <= LevelDiff <=80: - x = (LevelDiff - 70)/ (80-70) - s = (3*(x)**2) - (2*(x)**3) - HealthMulti = ShieldValueLow+s*ShieldValueHigh - ShieldMulti = HealthValueLow+s*HealthValueHigh - ArmorMulti = ArmorValueLow+s*ArmorValueHigh - CurrentShieldValue = (1-s)*ShieldValueLow+s*ShieldValueHigh - CurrentHealthValue = (1-s)*HealthValueLow+s*HealthValueHigh - CurrentArmorValue = (1-s)*ArmorValueLow+s*ArmorValueHigh - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - embed = discord.Embed(title=i['name'], - description='**DPS:** {:,}'.format(int(damage))+'\n**Health:** {:,}'.format(int(CurrentHealthValue))+'\n**Armor:** {:,}'.format(int(CurrentArmorValue))+'\n**Shields:** {:,}'.format(int(CurrentShieldValue))+'\n**DR:** {}%'.format(DamageReduction)+'\n**EHP:** {:,}'.format(int(ehp)), - colour=discord.Colour(0x7ed321)) - embed.set_thumbnail(url='https://raw.githubusercontent.com/empdarkness/warframe-data/master/img/'+i['imageName']) - embed.set_footer(text='This does not take into account damage types.') - await ctx.send(embed=embed) - - @specter.error - async def spectererror(self, ctx, error): - embed = discord.Embed(title='Syntax Error', - description='!specter \nUse `""` to use weapons with multiple words.\nUse the base mission level. Ex. Mot = 40\n`!specter Nidus "Prisma Gorgon" 1000 40`', - colour=discord.Colour(0x900f0f)) - await ctx.send(embed=embed) - - @commands.command(name="enemy") - async def enemy(self, ctx, enemy, damage, CurrentLevel, MissionLevel, *args): - old = ''.join(args) - damage = damage.title() - enemyx = enemy.title() - fireRate = '' - primary = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Primary.json').json() - secondary = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Secondary.json').json() - melee = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Melee.json').json() - enemy = requests.get('https://raw.githubusercontent.com/empdarkness/warframe-data/master/Enemy.json').json() - try: - if damage == 'Primary': - for i in enemy: - if enemyx == i['name']: - weapon = i['primary'] - for x in primary: - if weapon == x['name']: - damage = int(x['totalDamage'])*int(x['multishot']) - fireRate = float(x['fireRate']) - for i in enemy: - if enemyx == i['name']: - weapon = i['primary'] - for x in secondary: - if weapon == x['name']: - damage = int(x['totalDamage'])*int(x['multishot']) - fireRate = float(x['fireRate']) - if damage == 'Melee': - for i in enemy: - if enemyx == i['name']: - weapon = i['melee'] - for x in melee: - if weapon == x['name']: - damage = int(x['totalDamage']) - fireRate = float(x['fireRate']) - except: - damage = 0 - LevelDiff = float(CurrentLevel) - float(MissionLevel) - multi = 1+0.015*(float(LevelDiff))**1.55 - if fireRate == True: - damage = float(multi)*float(damage)*float(fireRate) - else: - damage = float(multi)*float(damage) - count=0 - for i in enemy: - if enemyx == i['name']: - if count == 0: - if 'old' in old: - count+=1 - HealthMulti = (1 + float(LevelDiff)**1.75 * 0.005) - ShieldMulti = (1 + float(LevelDiff)**2 * 0.0075) - ArmorMulti = (1 + float(LevelDiff)**1.75 * 0.005) - HealthValueOld = int(i['health']) * HealthMulti - ShieldValueOld = int(i['shield']) * ShieldMulti - ArmorValueOld = int(i['armor']) * ArmorMulti - CurrentShieldValue = ShieldValueOld - CurrentHealthValue = HealthValueOld - CurrentArmorValue = ArmorValueOld - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - embed = discord.Embed(title=i['name'], - description='**DPS:** {:,}'.format(int(damage))+'\n**Health:** {:,}'.format(int(CurrentHealthValue))+'\n**Armor:** {:,}'.format(int(CurrentArmorValue))+'\n**Shields:** {:,}'.format(int(CurrentShieldValue))+'\n**DR:** {}%'.format(DamageReduction)+'\n**EHP:** {:,}'.format(int(ehp)), - colour=discord.Colour(0x7ed321)) - embed.set_footer(text='This does not take into account damage types.') - await ctx.send(embed=embed) - else: - count+=1 - HealthMultiLow = (1 + float(LevelDiff)**2 * 0.015) - ShieldMultiLow = (1 + float(LevelDiff)**1.75 * 0.02) - ArmorMultiLow = (1 + float(LevelDiff)**1.75 * 0.005) - HealthMultiHigh = (1 + float(LevelDiff)**0.5 * 10.7331) - ShieldMultiHigh = (1 + float(LevelDiff)**0.75 * 1.6) - ArmorMultiHigh = (1 + float(LevelDiff)**0.75 * 0.4) - HealthValueLow = int(i['health']) * HealthMultiLow - ShieldValueLow = int(i['shield']) * ShieldMultiLow - ArmorValueLow = int(i['armor']) * ArmorMultiLow - HealthValueHigh = int(i['health']) * HealthMultiHigh - ShieldValueHigh = int(i['shield']) * ShieldMultiHigh - ArmorValueHigh = int(i['armor']) * ArmorMultiHigh - if int(LevelDiff) <=70: - HealthMulti = HealthMultiLow - ShieldMulti = ShieldMultiLow - ArmorMulti = ArmorMultiLow - CurrentShieldValue = ShieldValueLow - CurrentHealthValue = HealthValueLow - CurrentArmorValue = ArmorValueLow - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - if int(LevelDiff) >=80: - HealthMulti = HealthMultiHigh - ShieldMulti = ShieldMultiHigh - ArmorMulti = ArmorMultiHigh - CurrentShieldValue = ShieldValueHigh - CurrentHealthValue = HealthValueHigh - CurrentArmorValue = ArmorValueHigh - DamageReduction = 0 - ehp = CurrentHealthValue - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - if 70 <= LevelDiff <=80: - x = (LevelDiff - 70)/ (80-70) - s = (3*(x)**2) - (2*(x)**3) - HealthMulti = ShieldValueLow+s*ShieldValueHigh - ShieldMulti = HealthValueLow+s*HealthValueHigh - ArmorMulti = ArmorValueLow+s*ArmorValueHigh - CurrentShieldValue = (1-s)*ShieldValueLow+s*ShieldValueHigh - CurrentHealthValue = (1-s)*HealthValueLow+s*HealthValueHigh - CurrentArmorValue = (1-s)*ArmorValueLow+s*ArmorValueHigh - if not i['shield'] == 0 and i['armor'] == 0: - ehp = i['health'] * (HealthMulti + ShieldMulti*(i['shield']/i['health'])) - DamageReduction = 0 - elif i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - elif not i['shield'] == 0 and not i['armor'] == 0: - ehp = i['health'] * (HealthMulti*(1+((i['armor']*ArmorMulti)/300))+ShieldMulti*((i['shield'])/(i['health']))) - DamageReduction = round(((CurrentArmorValue)/(CurrentArmorValue+300)), 5)*100 - DamageReduction = round(DamageReduction, 5) - embed = discord.Embed(title=i['name'], - description='**DPS:** {:,}'.format(int(damage))+'\n**Health:** {:,}'.format(int(CurrentHealthValue))+'\n**Armor:** {:,}'.format(int(CurrentArmorValue))+'\n**Shields:** {:,}'.format(int(CurrentShieldValue))+'\n**DR:** {}%'.format(DamageReduction)+'\n**EHP:** {:,}'.format(int(ehp)), - colour=discord.Colour(0x7ed321)) - embed.set_footer(text='This does not take into account damage types.') - await ctx.send(embed=embed) - - @enemy.error - async def enemyerror(self, ctx, error): - print(error) - embed = discord.Embed(title='Syntax Error', - description='!enemy "Enemy" \n`Primary` = Normal weapon\n`Melee` = Disarmed\nUse the base mission level. Ex. Mot = 40\nSome enemies may not have known weapon references and will show 0 damage.\n!enemy "Corrupted Heavy Gunner" primary 1000 40', - colour=discord.Colour(0x900f0f)) - await ctx.send(embed=embed) - - - # ehp calculator - @commands.command(name="ehp") - async def ehp(self, ctx, health, armor): - calc = int(health)*(1 + int(armor)/300) - ehpe = discord.Embed(title="Effective Health Calculation", - description="**Armor:** *" + str(armor) + "*\n**Health:** *" + str(health) + "* \n**Effective Health:** *" + str(int(calc)) + "*", - colour=discord.Colour(0x900f0f)) - ehpe.set_footer(text="This does not take into account damage types.") - await ctx.send(embed=ehpe) - - @ehp.error - async def ehperror(self, ctx, error): - await ctx.send("Invalid syntax.\n!ehp ") - - # status calculator - @commands.command(name="status") - async def status(self, ctx, base, status): - bs = int(base) - st = float(status) - calc = bs + (bs * (float(st)/100)) - await ctx.send(calc) - - @status.error - async def statuserror(self, ctx, error): - await ctx.send("Invalid Syntax.\n!status ") - - @bot.command(name='nightwave', aliases=['nw']) - async def nw(self, ctx): - nwapi = requests.get('http://content.warframe.com/dynamic/worldState.php').json()['SeasonInfo'] - timestamp = datetime.datetime.fromtimestamp(int(nwapi['Expiry']['$date']['$numberLong'])/1000) - nightwave = discord.Embed(title="Nightwave", - colour=discord.Colour(0x900f0f), - timestamp=timestamp) - nightwave.set_footer(text='Season '+str(nwapi['Season'])+' - Phase '+str(nwapi['Phase'])+' ends') - for i in nwapi['ActiveChallenges']: - nightwave.add_field(name=lang[i['Challenge'].lower()]['value']+' - **'+str(lang[i['Challenge'].lower()]['standing'])+'**', value=lang[i['Challenge'].lower()]['desc'], inline=True) - await ctx.send(embed=nightwave) - - @nw.error - async def nwerror(self, ctx, error): - await ctx.send(content=error) - - # void trader - @bot.command(name="baro") - async def baro(self, ctx): - voidTrader = request_baro() - if voidTrader['active'] == True: - x = prettytable.PrettyTable(["Item", "Ducats", "Credits"]) - x.sortby = "Ducats" - x.reversesort=True - for item in voidTrader['inventory']: - x.add_row((item["item"], item["ducats"], item["credits"])) - await ctx.send(str("```") + str(x) + ("```")) - else: - timestamp = datetime.datetime.fromtimestamp(voidTrader['activation']) - baro = discord.Embed(title="Baro Ki'Teer is currently not available.", - colour=discord.Colour(0x900f0f), - timestamp=timestamp) - baro.set_footer(text="Arrives at "+voidTrader['location']) - await ctx.send(embed=baro) - - @baro.error - async def baroerror(self, ctx, error): - await ctx.send(error) - - # sortie - @bot.command(name="sortie") - async def sortie(self, ctx): - sortie = request_sortie() - timestamp = (datetime.datetime.fromtimestamp(int(sortie['expiry'])/1000)) - arb = discord.Embed(title=sortie['boss'], - colour=discord.Colour(0x900f0f), - timestamp=timestamp) - arb.add_field(name=sortie['missions'][0]['node']['node']+' ({})'.format(sortie['missions'][0]['node']['planet'])+' - '+sortie['missions'][0]['missionType'], value=sortie['missions'][0]['modifierType']+':\n - '+sortie['missions'][0]['modifierDescription'], inline=False) - arb.add_field(name=sortie['missions'][1]['node']['node']+' ({})'.format(sortie['missions'][1]['node']['planet'])+' - '+sortie['missions'][1]['missionType'], value=sortie['missions'][1]['modifierType']+':\n - '+sortie['missions'][1]['modifierDescription'], inline=False) - arb.add_field(name=sortie['missions'][2]['node']['node']+' ({})'.format(sortie['missions'][2]['node']['planet'])+' - '+sortie['missions'][2]['missionType'], value=sortie['missions'][2]['modifierType']+':\n - '+sortie['missions'][2]['modifierDescription'], inline=False) - arb.set_footer(text="Expires") - arb.set_thumbnail(url='https://i.imgur.com/7Avse3e.png') - await ctx.send(embed=arb) - - @sortie.error - async def sortieerror(self, ctx, error): - await ctx.send(error) - -def request_sortie(): - sortie = requests.get('http://content.warframe.com/dynamic/worldState.php').json()['Sorties'][0] - sortie = {"id": sortie['_id']['$oid'], - "activation": sortie['Activation']['$date']['$numberLong'], - "expiry": sortie['Expiry']['$date']['$numberLong'], - "boss": sortieData['bosses'][sortie['Boss']]['name'], - "missions": [ - { - "missionType": missionTypes[sortie['Variants'][0]['missionType']], - "modifierType": sortieData['modifierTypes'][sortie['Variants'][0]['modifierType']], - "modifierDescription": sortieData['modifierDescription'][sortie['Variants'][0]['modifierType']], - "node": solNodes[sortie['Variants'][0]['node']] - }, - { - "missionType": missionTypes[sortie['Variants'][1]['missionType']], - "modifierType": sortieData['modifierTypes'][sortie['Variants'][1]['modifierType']], - "modifierDescription": sortieData['modifierDescription'][sortie['Variants'][1]['modifierType']], - "node": solNodes[sortie['Variants'][1]['node']] - }, - { - "missionType": missionTypes[sortie['Variants'][2]['missionType']], - "modifierType": sortieData['modifierTypes'][sortie['Variants'][2]['modifierType']], - "modifierDescription": sortieData['modifierDescription'][sortie['Variants'][2]['modifierType']], - "node": solNodes[sortie['Variants'][2]['node']] - } - ] - } - return sortie - -def request_baro(): - baroapi = requests.get('http://content.warframe.com/dynamic/worldState.php').json()['VoidTraders'][0] - x = False - if datetime.datetime.now() > datetime.datetime.fromtimestamp(int(baroapi['Activation']['$date']['$numberLong'])/1000): - x = True - voidTrader = {'id': baroapi['_id']['$oid'], - 'activation': int(baroapi['Activation']['$date']['$numberLong'])/1000, - 'expiry': int(baroapi['Expiry']['$date']['$numberLong'])/1000, - 'active': x, - 'location': solNodes[baroapi['Node']]['node']+' ({})'.format(solNodes[baroapi['Node']]['planet']), - 'inventory': [] - } - if voidTrader['active'] == True: - for i in baroapi['Manifest']: - i = {'item':lang[i['ItemType'].lower()], - 'ducats':i['PrimePrice'], - 'credits':i['RegularPrice']} - voidTrader['inventory'].append(i) - return voidTrader - -async def baro_post_task(): - global OldBaro - global CurrentBaro - global voidTrader - CurrentBaro = request_baro() - if not CurrentBaro == OldBaro: ## prevents duplicate posting - if CurrentBaro['active'] == True: - for i in servers: - x = prettytable.PrettyTable(["Item", "Ducats", "Credits"]) - x.sortby = "Ducats" - x.reversesort=True - for item in CurrentBaro['inventory']: - x.add_row((item["item"], item["ducats"], item["credits"])) - try: - async with aiohttp.ClientSession() as session: - webhook = Webhook.from_url(i['barowebhook'], adapter=AsyncWebhookAdapter(session)) - await webhook.send(content='```'+str(x)+'```', avatar_url='https://content.warframe.com/MobileExport/Lotus/Interface/Icons/Player/BaroKiteerAvatar.png') - except: - pass - OldBaro = CurrentBaro ### setting old baro to the one that was just posted, so it doesnt send duplicate - -async def gftl(): - global gftla - global gftlb - gftlb = [] - alerts = requests.get('https://api.warframestat.us/pc/alerts').json() - for alert in alerts: - if alert['id'] not in gftla: - if alert['mission']['description'] == 'Gift From The Lotus': - timestamp = datetime.datetime.fromisoformat(alert['expiry'][:-1]) - embed = discord.Embed(title=alert['mission']['description'], - colour=discord.Colour(0x9013fe), - timestamp=timestamp) - embed.add_field(name='Node', value=alert['mission']['node'], inline=True) - embed.add_field(name='Mission Type', value=alert['mission']['type'], inline=True) - embed.add_field(name='Faction', value=alert['mission']['faction'], inline=True) - embed.add_field(name='Level', value=str(alert['mission']['minEnemyLevel'])+' - '+str(alert['mission']['maxEnemyLevel']), inline=True) - embed.add_field(name='Reward', value=alert['mission']['reward']['asString'], inline=False) - embed.set_footer(text=alert['id']+' / Ends') - for i in servers: - try: - async with aiohttp.ClientSession() as session: - webhook = Webhook.from_url(i['giftinvasionswebhook'], adapter=AsyncWebhookAdapter(session)) - await webhook.send(embed=embed) - except: - pass - gftla.append(alert['id']) - gftlb.append(alert['id']) - for i in gftla: - if i not in gftlb: - gftla.remove(i) - -async def rt(): - global redtext - xd = requests.get('https://10o.io/EE.log').json() - y = [] - for i in xd: - if (i not in redtext) and ('IRC in: :[' in i['message']): - haha = re.search("IRC in: :([^ ]+) WALLOPS \:(.*)", i['message']) - for i in servers: - try: - async with aiohttp.ClientSession() as session: - webhook = Webhook.from_url(i['redtextwebhook'], adapter=AsyncWebhookAdapter(session)) - await webhook.send('```diff\n- '+haha[2]+'```') - except: - pass - redtext.append(i) - y.append(i) - for i in redtext: - if i not in y: - redtext.remove(i) - -async def inv(): - global inva - global invb - invasions = requests.get('https://api.warframestat.us/pc/invasions').json() - for invasion in invasions: - if invasion['id'] not in inva: - node = invasion['node'] - if invasion['vsInfestation'] == True: - attackReward = 'None' - defendReward = invasion['defenderReward']['countedItems'][0] - for i in invasionitem: - if i in defendReward['type'] or i in defendReward['type']: - embed = discord.Embed(title=invasion['node'], - colour=discord.Colour(invasion['attackerReward']['color'])) - embed.add_field(name=invasion['attackingFaction'], value=attackReward, inline=False) - embed.add_field(name=invasion['defendingFaction'], value=defendReward['type'], inline=False) - embed.set_author(name=invasion['desc']) - embed.set_thumbnail(url=invasion['defenderReward']['thumbnail']) - embed.set_footer(text=invasion['id']) - for i in servers: - try: - guild = bot.get_guild(i['serverid']) - except: - pass - content = '' - try: - role = discord.utils.get(guild.roles, name='Potato') - content+=' '+role.mention - except: - pass - try: - async with aiohttp.ClientSession() as session: - webhook = Webhook.from_url(i['giftinvasionswebhook'], adapter=AsyncWebhookAdapter(session)) - await webhook.send(content=content, embed=embed) - except: - pass - else: - defendReward = invasion['defenderReward']['countedItems'][0] - attackReward = invasion['attackerReward']['countedItems'][0] - for i in invasionitem: - if i in defendReward['type'] or i in defendReward['type']: - embed = discord.Embed(title=invasion['node'], - colour=discord.Colour(1)) - embed.add_field(name=invasion['attackingFaction'], value=attackReward['type'], inline=False) - embed.add_field(name=invasion['defendingFaction'], value=defendReward['type'], inline=False) - embed.set_author(name=invasion['desc']) - if i in defendReward['type']: - embed.set_thumbnail(url=invasion['defenderReward']['thumbnail']) - else: - embed.set_thumbnail(url=invasion['attackerReward']['thumbnail']) - embed.set_footer(text=invasion['id']) - for i in servers: - try: - guild = bot.get_guild(i['serverid']) - except: - pass - content = '' - try: - role = discord.utils.get(guild.roles, name='Potato') - content+=' '+role.mention - except: - pass - try: - async with aiohttp.ClientSession() as session: - webhook = Webhook.from_url(i['giftinvasionswebhook'], adapter=AsyncWebhookAdapter(session)) - await webhook.send(content=content, embed=embed) - except: - pass - inva.append(invasion['id']) - invb.append(invasion['id']) - for i in inva: - if i not in invb: - inva.remove(i) - -def setup(bot): - sched.add_job(baro_post_task, trigger='cron', minute='*', id='Baro', misfire_grace_time=60, replace_existing=True) # trigger every minute, works best cus cron - sched.add_job(inv, trigger='cron', minute='*', id='Invasions', misfire_grace_time=60, replace_existing=True) - sched.add_job(gftl, trigger='cron', minute='*', id='GFTL', misfire_grace_time=60, replace_existing=True) - sched.add_job(rt, trigger='cron', minute='*', id='Redtext', misfire_grace_time=60, replace_existing=True) - bot.add_cog(Warframe(bot)) diff --git a/config.py b/config.py index 45b16d2..c7bccbe 100644 --- a/config.py +++ b/config.py @@ -9,14 +9,10 @@ token = "bot token" ## change server id to yours and invite the bot if you want role pings ## make a webhook in the channel you want arbitrations to be posted and use the url ## this DOES support multiple servers if you want to use it in that manner -## leave the values blank if you do not want them used servers = [ { "name": "Example", "serverid": 000000000000000000, "arbywebhook": "arbitration webhook url", - "barowebhook": "baro webhook url", - "giftinvasionswebhook": "gift/invasions webhook url", - "redtextwebhook": "redtext webhook url" } ]