Add wikipedia guessing game to annna. - annna - Annna the nice friendly bot. HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/ DIR Log DIR Files DIR Refs DIR Tags DIR README --- DIR commit 56bd88325d9acf1fce9aa8cbe0e03245c48e8ec1 DIR parent 0a9075f602fca9a5f41cc68f2b627b338c8a0376 HTML Author: Annna Robert-Houdin <annna@bitreich.org> Date: Mon, 10 Apr 2023 12:40:31 +0200 Add wikipedia guessing game to annna. Diffstat: M annna-channel-service | 3 +++ A wikipediagame | 111 ++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 0 deletions(-) --- DIR diff --git a/annna-channel-service b/annna-channel-service @@ -28,6 +28,9 @@ do \#bitreich-idle) annna-message-idle "${server}" "${channel}" "${user}" "${text}" ;; + \#bitreich-wikigame) + annna-message-wikigame "${server}" "${channel}" "${user}" "${text}" + ;; *) annna-message-common "${server}" "${channel}" "${user}" "${text}" ;; DIR diff --git a/wikipediagame b/wikipediagame @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Idea from: https://github.com/izabera/izabot/blob/master/cus_lib.py#L89 +# + +import os +import sys +import getopt +import wikipedia as w +import json + +def usage(app): + app = os.path.basename(app) + print("usage: %s [-h] cmd" % (app), file=sys.stderr) + sys.exit(1) + +def main(args): + try: + opts, largs = getopt.getopt(args[1:], "h") + except getopt.GetoptError as err: + print(str(err)) + usage(args[0]) + + basepath = "/home/annna/bin/modules/wikipediagame" + printsummary = 0 + newtitle = 0 + + for o, a in opts: + if o == "-h": + usage(args[0]) + else: + assert False, "unhandled option" + + if len(largs) < 1: + usage(args[0]) + + titlepath = "%s/lasttitle" % (basepath) + hintpath = "%s/hintsize" % (basepath) + + cmd = largs[0] + if cmd == "init": + title = str(w.random()) + if os.path.exists(hintpath): + os.remove(hintpath) + if os.path.exists(titlepath): + os.remove(titlepath) + newtitle = 1 + printsummary = 1 + else: + if os.path.exists(titlepath): + titlefd = open(titlepath, "r") + title = str(json.load(titlefd)) + titlefd.close() + else: + title = str(w.random()) + newtitle = 1 + printsummary = 1 + + if newtitle == 1: + titlefd = open(titlepath, "w+") + json.dump(title, titlefd) + titlefd.close() + + if cmd == "summary": + printsummary = 1 + + if printsummary == 1: + summary = w.summary(title).replace("\n", " ") + for titlepart in title.split(" "): + summary = summary.replace(titlepart, "*" * len(titlepart)) + print(summary) + + if os.path.exists(hintpath): + hintfd = open(hintpath, "r") + try: + hintsize = int(json.load(hintfd)) + except json.decoder.JSONDecodeError: + hintsize = 0 + hintfd.close() + else: + hintsize = 0 + + if cmd == "hint": + hintsize += 3 + hint = title[:hintsize] \ + + "".join(["*" if c != ' ' else ' ' for c in title[hintsize:]]) + print("Hint: %s" % (hint)) + + hintfd = open(hintpath, "w+") + json.dump(hintsize, hintfd) + hintfd.close() + + if cmd == "try": + if len(largs) < 2: + usage(args[0]) + trytext = largs[1] + if title.strip().lower() == trytext.strip().lower(): + print("Congrats! You have found the right title! :: %s" % (title)) + if os.path.exists(hintpath): + os.remove(hintpath) + if os.path.exists(titlepath): + os.remove(titlepath) + else: + print("Sorry, wrong guess.") + + return 0 + +if __name__ == "__main__": + sys.exit(main(sys.argv)) +