intel-screenbot

An Ingress Intel Map Bot for Hangoutsbot
git clone git://archive.git.mtrnord.blog/MTRNord/intel-screenbot.git
Log | Files | Refs | README | LICENSE

commit 21d64ca9b6636dc8112e0d890745164872ebd823
parent c061ac3ee83c9e755c0f3ed3e4aab735d5dab937
Author: Marcel <MTRNord@users.noreply.github.com>
Date:   Sat, 12 Nov 2016 16:00:22 +0100

Prepare IITC
Diffstat:
Mintel_screenbot/__init__.py | 67++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 62 insertions(+), 5 deletions(-)

diff --git a/intel_screenbot/__init__.py b/intel_screenbot/__init__.py @@ -8,7 +8,7 @@ logger = logging.getLogger(__name__) def _initialise(bot): - plugins.register_user_command(["intel"]) + plugins.register_user_command(["intel", "iitc"]) plugins.register_admin_command(["setintel", "clearintel"]) @asyncio.coroutine @@ -23,16 +23,16 @@ def _get_lines(shell_command): return p.returncode, stdout @asyncio.coroutine -def _screencap(url, filepath, filename, SACSID, CSRF, search, bot, event): +def _screencap(maptype, url, filepath, filename, SACSID, CSRF, search, bot, event): loop = asyncio.get_event_loop() logger.info("screencapping {} and saving as {}".format(url, filepath)) if search == False: - command = 'phantomjs hangupsbot/plugins/intel_screenbot/screencap.js "' + SACSID + '" "' + CSRF + '" "' + url + '" "' + filepath + '"' + command = 'phantomjs hangupsbot/plugins/intel_screenbot/screencap_' + maptype + '.js "' + SACSID + '" "' + CSRF + '" "' + url + '" "' + filepath + '"' task = _get_lines(command) task = asyncio.wait_for(task, 180.0, loop=self.loop) exitcode, stdout = loop.run_until_complete(task) else: - command = 'phantomjs hangupsbot/plugins/intel_screenbot/screencap.js "' + SACSID + '" "' + CSRF + '" "' + url + '" "' + filepath + '" "' + search + '"' + command = 'phantomjs hangupsbot/plugins/intel_screenbot/screencap_' + maptype + '.js "' + SACSID + '" "' + CSRF + '" "' + url + '" "' + filepath + '" "' + search + '"' task = _get_lines(command) task = asyncio.wait_for(task, 180.0, loop=loop) exitcode, stdout = yield from task @@ -129,8 +129,65 @@ def intel(bot, event, *args): try: loop = asyncio.get_event_loop() - image_data = yield from _screencap(url, filepath, filename, SACSID, CSRF, search, bot, event) + image_data = yield from _screencap("intel", url, filepath, filename, SACSID, CSRF, search, bot, event) except Exception as e: yield from bot.coro_send_message(event.conv_id, "<i>error getting screenshot</i>") logger.exception("screencap failed".format(url)) return + +def iitc(bot, event, *args): + """get a screenshot of a user provided URL or the default URL of the hangout. + """ + + if args: + if len(args) > 1: + url = ' '.join(str(i) for i in args) + else: + url = args[0] + else: + url = bot.conversation_memory_get(event.conv_id, 'IntelURL') + + if bot.config.exists(["intel_screenbot", "SACSID"]): + SACSID = bot.config.get_by_path(["intel_screenbot", "SACSID"]) + else: + html = "<i><b>{}</b> No Intel SACSID Cookie has been added to config. Unable to authenticate".format(event.user.full_name) + yield from bot.coro_send_message(event.conv, html) + if bot.config.exists(["intel_screenbot", "CSRF"]): + CSRF = bot.config.get_by_path(["intel_screenbot", "CSRF"]) + else: + html = "<i><b>{}</b> No Intel CSRF Cookie has been added to config. Unable to authenticate".format(event.user.full_name) + yield from bot.coro_send_message(event.conv, html) + + if url is None: + html = "<i><b>{}</b> No Intel URL has been set for screenshots.".format(event.user.full_name) + yield from bot.coro_send_message(event.conv, html) + + else: + if re.match(r'^[a-zA-Z]+://', url): + search = False + ZoomSearch = re.finditer(r"(?:&z=).*", url) + for matchNum, zoomlevel_raw in enumerate(ZoomSearch): + matchNum = matchNum + 1 + zoomlevel_clean = zoomlevel_raw.group() + zoomlevel = zoomlevel_clean[3:][:2] + if zoomlevel.isdigit(): + yield from bot.coro_send_message(event.conv_id, "<i>intel map at zoom level "+ zoomlevel + " requested, please wait...</i>") + else: + yield from bot.coro_send_message(event.conv_id, "<i>intel map at last zoom level requested, please wait...</i>") + else: + search = url + logger.info(search); + url = 'https://www.ingress.com/intel' + yield from bot.coro_send_message(event.conv_id, "<i>intel map is searching " + search + " and screenshooting as requested, please wait...</i>") + filename = event.conv_id + "." + str(time.time()) +".png" + filepath = tempfile.NamedTemporaryFile(prefix=event.conv_id, suffix=".png", delete=False).name + logger.debug("temporary screenshot file: {}".format(filepath)) + + try: + loop = asyncio.get_event_loop() + image_data = yield from _screencap("iitc", url, filepath, filename, SACSID, CSRF, search, bot, event) + except Exception as e: + yield from bot.coro_send_message(event.conv_id, "<i>error getting screenshot</i>") + logger.exception("screencap failed".format(url)) + return +