This repository has been archived on 2020-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
robo-rat/runescape.py

119 lines
4.5 KiB
Python

import discord
from discord.ext import commands
import asyncio
import runescapeapi
import json
from concurrent.futures import ThreadPoolExecutor
import functools
with open('rs_emojis.json', 'r') as f:
emojis = json.load(f)
tpe = ThreadPoolExecutor()
async def execute(func, *args, **kwargs):
partial = functools.partial(func, *args, **kwargs)
loop = asyncio.get_event_loop()
return await loop.run_in_executor(tpe, partial)
class runescape:
def __init__(self, bot):
self.bot = bot
@commands.command(pass_context=True)
async def profile(self, ctx, *, rsn=""):
"""returns the runescape stats of a given rsn"""
this = runescapeapi.Player(rsn)
em = discord.Embed()
try:
em.set_author(name="RuneMetrics profile of: {}"
.format(await execute(this.rsn)))
except LookupError:
await self.bot.send_message(ctx.message.channel,
'No profile found')
return
levels = await execute(this.stats)
left = ''
for c, i in enumerate(levels, 1):
left += f"{emojis[i['name']]}{i['level']}"
if c % 3 == 0:
left += '\n'
em.add_field(name="Levels", value=left, inline=True)
q_ = await execute(this.quest_summary)
overalltotal = await execute(this.overall_total)
combat = await execute(this.combat)
clan = await execute(this.clan)
title = await execute(this.title)
try:
quest_total = sum(q_.values())
except TypeError:
quest_total = None
right = f'**Quests:** {q_["complete"]}/{quest_total} ' \
f'({q_["started"]} in progress)\n' \
f'**Rank:** {overalltotal["rank"]}\n' \
f'**Total level:** {overalltotal["level"]}\n' \
f'**Total xp:** {overalltotal["xp"]:,}\n' \
f'**Combat level:** {combat["combatlevel"]}\n' \
f'**Clan:** {clan}\n' \
f'**Title:** {title["title"]}'
em.add_field(name='Info', value=right, inline=True)
em.set_thumbnail(url=await execute(this.forum_pic))
await self.bot.say(embed=em)
activities = await execute(this.alog)
if activities == []:
return
act = ""
for a in activities[:10]:
act = act + f'**{a["date"]}** {a["text"]}\n' \
f'```{" ".join(a["details"].split())}```'
await self.bot.say(act)
act = ""
for a in activities[10:]:
act = act + f'**{a["date"]}** {a["text"]}\n' \
f'```{" ".join(a["details"].split())}```'
await self.bot.say(act)
@commands.command(pass_context=True)
async def map(self, ctx):
url = 'http://167.99.150.82/maps/tiles/2_0_{}_{}.png'
x = 51
y = 50
em = discord.Embed()
em.set_image(url=url.format(x, y))
msg = await self.bot.say(embed=em)
await self.bot.add_reaction(msg, '')
await self.bot.add_reaction(msg, '')
await self.bot.add_reaction(msg, '')
await self.bot.add_reaction(msg, '')
while True:
r = await self.bot.wait_for_reaction(message=msg,
user=ctx.message.author,
emoji=['', '', '', ''])
if r.reaction.emoji == '':
y = y + 1
em.set_image(url=url.format(x, y))
await self.bot.remove_reaction(msg, '', ctx.message.author)
await self.bot.edit_message(msg, embed=em)
elif r.reaction.emoji == '':
y = y - 1
em.set_image(url=url.format(x, y))
await self.bot.remove_reaction(msg, '', ctx.message.author)
await self.bot.edit_message(msg, embed=em)
elif r.reaction.emoji == '':
x = x - 1
em.set_image(url=url.format(x, y))
await self.bot.remove_reaction(msg, '', ctx.message.author)
await self.bot.edit_message(msg, embed=em)
elif r.reaction.emoji == '':
x = x + 1
em.set_image(url=url.format(x, y))
await self.bot.remove_reaction(msg, '', ctx.message.author)
await self.bot.edit_message(msg, embed=em)
def setup(bot):
bot.add_cog(runescape(bot))