Introduction
Introduction Statistics Contact Development Disclaimer Help
wikipediagame - annna - Annna the nice friendly bot.
git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws6…
Log
Files
Refs
Tags
README
---
wikipediagame (4569B)
---
1 #!/usr/bin/env python
2 # coding=utf-8
3 #
4 # Idea from: https://github.com/izabera/izabot/blob/master/cus_lib.py#L89
5 #
6
7 import os
8 import sys
9 import getopt
10 import wikipedia as w
11 import json
12 import random
13 from difflib import SequenceMatcher
14
15 def usage(app):
16 app = os.path.basename(app)
17 print("usage: %s [-h] cmd" % (app), file=sys.stderr)
18 sys.exit(1)
19
20 def concealtitle(s, title):
21 splittitle = title.replace(",", " ").replace("-", " ")
22 for titlepart in splittitle.split():
23 s = s.replace(titlepart, "*" * len(titlepart))
24 return s
25
26 def geturi(wpage):
27 wuri = wpage.url
28 return wuri.replace("https://en.wikipedia.org/wiki", "gopher://gophe…
29
30 def endgame(hintpath, titlepath):
31 if os.path.exists(hintpath):
32 os.remove(hintpath)
33 if os.path.exists(titlepath):
34 os.remove(titlepath)
35
36 def main(args):
37 try:
38 opts, largs = getopt.getopt(args[1:], "h")
39 except getopt.GetoptError as err:
40 print(str(err))
41 usage(args[0])
42
43 basepath = "/home/annna/bin/modules/wikipediagame"
44 printsummary = 0
45 newtitle = 0
46 title = None
47
48 for o, a in opts:
49 if o == "-h":
50 usage(args[0])
51 else:
52 assert False, "unhandled option"
53
54 if len(largs) < 1:
55 usage(args[0])
56
57 titlepath = "%s/lasttitle" % (basepath)
58 hintpath = "%s/hintsize" % (basepath)
59
60 cmd = largs[0]
61 if cmd == "init":
62 if len(largs) > 1:
63 searchresults = w.search(largs[1])
64 while len(searchresults) > 0:
65 title = random.choice(searchresults)
66 try:
67 summary = w.summary(title)
68 break
69 except w.exceptions.DisambiguationError:
70 searchresults.remove(title)
71 continue
72
73 if title == None:
74 summary = None
75 while summary == None:
76 title = str(w.random())
77 try:
78 summary = w.summary(title)
79 except (w.exceptions.DisambiguationError, w.exceptions.P…
80 continue
81
82 if os.path.exists(hintpath):
83 os.remove(hintpath)
84 if os.path.exists(titlepath):
85 os.remove(titlepath)
86 newtitle = 1
87 printsummary = 1
88 else:
89 if os.path.exists(titlepath):
90 titlefd = open(titlepath, "r")
91 title = str(json.load(titlefd))
92 titlefd.close()
93 else:
94 title = ""
95
96 if len(title) == 0:
97 print("There is no game started. Please run init.")
98 return 0
99
100 if newtitle == 1:
101 titlefd = open(titlepath, "w+")
102 json.dump(title, titlefd)
103 titlefd.close()
104
105 if cmd == "summary":
106 printsummary = 1
107
108 if printsummary == 1:
109 summary = w.summary(title).replace("\n", " ")
110 print(concealtitle(summary, title))
111
112 if os.path.exists(hintpath):
113 hintfd = open(hintpath, "r")
114 try:
115 hintsize = int(json.load(hintfd))
116 except json.decoder.JSONDecodeError:
117 hintsize = 0
118 hintfd.close()
119 else:
120 hintsize = 0
121
122 if cmd == "hint":
123 hintsize += 3
124 hint = title[:hintsize] \
125 + "".join(["*" if c != ' ' else ' ' for c in title[hintsize:…
126 print("Hint: %s" % (hint))
127
128 hintfd = open(hintpath, "w+")
129 json.dump(hintsize, hintfd)
130 hintfd.close()
131
132 if cmd == "more":
133 wpage = w.page(title)
134 images = [item for item in wpage.images if item.find('/commons/'…
135 if len(images) > 0 and random.random() < 0.5:
136 print(random.choice(images))
137 else:
138 paragraphs = wpage.content.split('\n')
139 paragraph = random.choice([item for item in paragraphs if le…
140 print(concealtitle(paragraph, title))
141
142 if cmd == "guess":
143 if len(largs) < 2:
144 usage(args[0])
145 trytext = largs[1]
146 if title.strip().lower() == trytext.strip().lower():
147 print("Congrats! You have found the right title! :: %s" % (g…
148 endgame(hintpath, titlepath)
149 else:
150 print("Sorry, wrong guess. (%.0f%% correct)" % \
151 (SequenceMatcher(None, title.strip().low…
152
153 if cmd == "giveup":
154 print("The correct title was: %s" % (geturi(w.page(title))))
155 endgame(hintpath, titlepath)
156
157 return 0
158
159 if __name__ == "__main__":
160 sys.exit(main(sys.argv))
161
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.