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.

94 lines
2.5 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
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 random
  11. import discord
  12. from discord.ext import commands
  13. logging.basicConfig(level=logging.INFO)
  14. DESCRIPTION = '''Schneiderbot, bald mit tollen Funktionen'''
  15. BOT = commands.Bot(command_prefix='!', description=DESCRIPTION)
  16. MENSA_URL = {
  17. "zentral": "zentralmensa",
  18. "nord": "nordmensa",
  19. "turm": "turmmensa"
  20. }
  21. MENSA_NAME = {
  22. "zentral": "Zentralmensa",
  23. "nord": "Nordmensa",
  24. "turm": "Turmmensa"
  25. }
  26. with open("stoll.txt", "r") as tmp_file:
  27. STOLL = tmp_file.readlines()
  28. @BOT.event
  29. async def on_ready():
  30. """ On ready """
  31. print('Logged in as')
  32. print(BOT.user.name)
  33. print(BOT.user.id)
  34. print('------')
  35. @BOT.command()
  36. async def hello():
  37. """Was ist das hier für eins Bot?"""
  38. await BOT.say("""Hallo, ich bin ein Bot.
  39. Ich liefere tolle Informationen über die Mensa. Die Infos kommen von
  40. https://mensa.schneider-hosting.de
  41. Mhmm, lecker. Guten Appetit!""")
  42. @BOT.command()
  43. async def mensa(which="zentral"):
  44. """Gibt leckere, äh, nützliche Infos über die Mensa aus.
  45. Standardmäßig für die Zentralmensa, aber probier auch mal nord oder turm aus."""
  46. if which not in MENSA_NAME:
  47. await BOT.say("Diese Mensa gibt es nicht! RTFM und versuchs nochmal.")
  48. return
  49. today = datetime.datetime.now().date().weekday() + 1
  50. if datetime.datetime.now().time() > datetime.time(hour=16):
  51. # Es ist zu spät am Tag, zeig das essen für morgen an
  52. today += 1
  53. with urllib.request.urlopen("https://mensa.schneider-hosting.de/static/%s.%d.json" % (MENSA_URL[which], today)) as url:
  54. data = json.loads(url.read().decode())
  55. await BOT.say("Das Essen für %s in der %s" % (data["date"], MENSA_NAME[which]))
  56. message = ""
  57. for meal in data["meals"]:
  58. meal_line = "**%s**\n" % meal["category"]
  59. meal_line += meal["title"].strip() + "\n"
  60. # Discord only allows up to 2000 chars per message
  61. if len(message) + len(meal_line) > 2000:
  62. await BOT.say(message)
  63. message = meal_line
  64. else:
  65. message += meal_line
  66. await BOT.say(message)
  67. @BOT.command()
  68. async def magie():
  69. """MAGIEEEEEE"""
  70. rand = random.SystemRandom()
  71. await BOT.say(STOLL[rand.randrange(0, len(STOLL), 1)])
  72. def main():
  73. """ entry point """
  74. token = open("token").read()
  75. BOT.run(token.strip())
  76. if __name__ == '__main__':
  77. main()