diabeetus.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. import requests
  3. import re
  4. import json
  5. import sys
  6. from event import Event
  7. if sys.version_info > (3, 0, 0):
  8. try:
  9. from .basemodule import BaseModule
  10. except (ImportError, SystemError):
  11. from modules.basemodule import BaseModule
  12. else:
  13. try:
  14. from basemodule import BaseModule
  15. except (ImportError, SystemError):
  16. from modules.basemodule import BaseModule
  17. class Diabeetus(BaseModule):
  18. def post_init(self):
  19. diabeetus = Event('__.diabeetus__')
  20. diabeetus.define(msg_definition='^\.[Dd]iabeetus')
  21. diabeetus.subscribe(self)
  22. self.bot.register_event(diabeetus, self)
  23. self.api_url = "https://bonkscout.herokuapp.com/api/v1/entries/current.json"
  24. self.LOW = 69
  25. self.HIGH = 200
  26. self.trend = {
  27. "Flat": "→",
  28. "FortyFiveDown":"↘",
  29. "FortyFiveUp":"↗",
  30. "SingleDown":"↓",
  31. "SingleUp":"↑",
  32. "DoubleDown":"⇊",
  33. "DoubleUp":"⇈",
  34. "TripleDown":"⇓",
  35. "TripleUp":"⇑"
  36. }
  37. def get_glucose(self, channel):
  38. """get the glucose"""
  39. r = requests.get(self.api_url)
  40. try:
  41. r.raise_for_status()
  42. except requests.exceptions.HTTPError:
  43. self.say(channel, "Encountered an error contacting the NightScout API")
  44. return
  45. entry = r.json()
  46. try:
  47. #grab the relevant data we want for formatting
  48. glucose = entry[0]['sgv']
  49. if (glucose <= self.LOW):
  50. color = '\x0304'
  51. elif (glucose >= self.HIGH):
  52. color = '\x0308'
  53. else:
  54. color = '\x0303'
  55. arrow = self.trend[entry[0]['direction']]
  56. except KeyError:
  57. self.say(channel, "Unable to get glucose data from results. Sorry.")
  58. return
  59. #return the formatted string
  60. return "Bonk's blood sugar is " + color + str(glucose) + "\x0F mg/dL, trending " + arrow
  61. def handle(self, event):
  62. self.say(event.channel, self.get_glucose(event.channel))