You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.1 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. #! /usr/bin/env python3
  2. """
  3. Code for schneiderbot
  4. """
  5. import os
  6. import datetime
  7. import urllib.request
  8. import json
  9. import logging
  10. import discord
  11. from discord.ext import commands
  12. logging.basicConfig(level=logging.INFO)
  13. DESCRIPTION = '''Schneiderbot, bald mit tollen Funktionen'''
  14. BOT = commands.Bot(command_prefix='!', description=DESCRIPTION)
  15. MENSA_URL = {
  16. "zentral": "zentralmensa",
  17. "nord": "nordmensa",
  18. "turm": "turmmensa"
  19. }
  20. MENSA_NAME = {
  21. "zentral": "Zentralmensa",
  22. "nord": "Nordmensa",
  23. "turm": "Turmmensa"
  24. }
  25. @BOT.event
  26. async def on_ready():
  27. """ On ready """
  28. print('Logged in as')
  29. print(BOT.user.name)
  30. print(BOT.user.id)
  31. print('------')
  32. @BOT.command()
  33. async def hello():
  34. """Was ist das hier für eins Bot?"""
  35. await BOT.say("""Hallo, ich bin ein Bot.
  36. Ich liefere tolle Informationen über die Mensa. Die Infos kommen von
  37. https://mensa.schneider-hosting.de
  38. Mhmm, lecker. Guten Appetit!""")
  39. @BOT.command()
  40. async def mensa(which="zentral"):
  41. """Gibt leckere, äh, nützliche Infos über die Mensa aus.
  42. Standardmäßig für die Zentralmensa, aber probier auch mal nord oder turm aus."""
  43. today = datetime.datetime.now().date().weekday() + 1
  44. if datetime.datetime.now().time() > datetime.time(hour=16):
  45. # Es ist zu spät am Tag, zeig das essen für morgen an
  46. today += 1
  47. with urllib.request.urlopen("https://mensa.schneider-hosting.de/static/%s.%d.json" % (MENSA_URL[which], today)) as url:
  48. data = json.loads(url.read().decode())
  49. message = ""
  50. for meal in data["meals"]:
  51. meal_line = "**%s**\n" % meal["category"]
  52. meal_line += meal["title"].strip() + "\n"
  53. # Discord only allows up to 2000 chars per message
  54. if len(message) + len(meal_line) > 2000:
  55. await BOT.say(message)
  56. message = meal_line
  57. else:
  58. message += meal_line
  59. await BOT.say(message)
  60. @BOT.command()
  61. async def magie():
  62. """MAGIEEEEEE"""
  63. await BOT.say("Magie ist Physik durch wollen!")
  64. def main():
  65. """ entry point """
  66. BOT.run(os.environ['SCHNEIDERBOT_TOKEN'])
  67. if __name__ == '__main__':
  68. main()