6
6
7
7
app = Flask (__name__ )
8
8
auth = HTTPBasicAuth ()
9
+ auth_GOD = HTTPBasicAuth ()
10
+ preshared_key = ""
9
11
id = 0
10
12
nPlayers = 0
11
13
roles = []
12
14
ip2role_index_name = {}
15
+ nComments = 0
16
+ comments_ordered = []
13
17
14
18
@auth .verify_password
15
19
def verify_password (username , password ):
@@ -27,13 +31,16 @@ def index():
27
31
ip = str (request .remote_addr )
28
32
29
33
if ip in ip2role_index_name .keys ():
30
- role = ip2role_index_name [ip ][0 ]
31
- image_name = ip2role_index_name [ip ][0 ] + "_" + str (ip2role_index_name [ip ][1 ])
34
+ return render_template ("Player.html" , player = ip2role_index_name [ip ])
32
35
else :
33
36
if id > nPlayers :
34
- return "Numbers of players out of range!" #TODO:well defined Error Page
37
+ return render_template ( "404.html" , is_farsi = True )
35
38
role = roles [id ]
36
- ip2role_index_name [ip ] = (role , str (randrange (1 , nRoles [role ] + 1 )), username )
39
+ ip2role_index_name [ip ] = [role ,
40
+ str (randrange (1 , nRoles [role ] + 1 )),
41
+ username ,
42
+ "alive" ,
43
+ False ]
37
44
image_name = role + "_" + str (ip2role_index_name [ip ][1 ])
38
45
print ("*" * 20 , "New Player" ,"*" * 20 )
39
46
toGod = ip + " : " + str (id ) + " : " + username + " --> " + role
@@ -47,6 +54,56 @@ def index():
47
54
is_farsi = True )
48
55
49
56
57
+ @auth_GOD .verify_password
58
+ def verify_password_god (username , password ):
59
+ if password == preshared_key :
60
+ return username
61
+
62
+
63
+ @app .route ('/GOD' )
64
+ @auth_GOD .login_required
65
+ def GOD_PAGE ():
66
+ global ip2role_index_name , nComments , comments_ordered
67
+ msg = ""
68
+ if request .args .get ("Kill" ) is not None :
69
+ ip = request .args .get ("Kill" )
70
+ if ip in ip2role_index_name .keys ():
71
+ if ip2role_index_name [ip ][3 ] == "alive" :
72
+ ip2role_index_name [ip ][3 ] = "dead"
73
+ else :
74
+ ip2role_index_name [ip ][3 ] = "alive"
75
+ else :
76
+ return render_template ("404.html" , is_farsi = True )
77
+ if request .args .get ("Ban" ) is not None :
78
+ ip = request .args .get ("Ban" )
79
+ if ip in ip2role_index_name .keys ():
80
+ if ip2role_index_name [ip ][3 ] == "alive" :
81
+ ip2role_index_name [ip ][3 ] = "banned"
82
+ elif ip2role_index_name [ip ][3 ] == "banned" :
83
+ ip2role_index_name [ip ][3 ] = "alive"
84
+ else :
85
+ return render_template ("404.html" , is_farsi = True )
86
+ if request .args .get ("Comment" ) is not None :
87
+ ip = request .args .get ("Comment" )
88
+ if ip in ip2role_index_name .keys ():
89
+ if ip2role_index_name [ip ][4 ] == False :
90
+ if nComments <= nPlayers // 3 :
91
+ ip2role_index_name [ip ][4 ] = True
92
+ nComments += 1
93
+ comments_ordered .append (ip )
94
+ else :
95
+ msg = "Error: Out of Comments."
96
+ else :
97
+ ip2role_index_name [ip ][4 ] = False
98
+ nComments -= 1
99
+ comments_ordered .remove (ip )
100
+ else :
101
+ return render_template ("404.html" , is_farsi = True )
102
+ return render_template ("GOD.html" , ip2role_index_name = ip2role_index_name ,
103
+ prompt_message = msg , roles = {role :roles .count (role ) for role in set (roles )},
104
+ comments = comments_ordered , role2team = role2team )
105
+
106
+
50
107
@app .errorhandler (404 )
51
108
def invalid_route (e ):
52
109
return render_template ("404.html" , is_farsi = True )
@@ -65,15 +122,45 @@ def help_me():
65
122
exit ()
66
123
67
124
125
+ def give_me_roles (ordered_roles ):
126
+ n = len (ordered_roles )
127
+ if n >= 14 :
128
+ ordered_roles [12 ] = 'Groom'
129
+ ordered_roles [13 ] = 'Bride'
130
+ if n % 3 == 0 :
131
+ ordered_roles [14 ] = 'Serial Killer'
132
+ if n % 3 != 0 :
133
+ try :
134
+ i = ordered_roles .index ('Mafia' )
135
+ ordered_roles [i ] = 'Made Man'
136
+ ordered_roles [2 ] = 'Reporter'
137
+ except ValueError :
138
+ pass
139
+ if n % 3 == 2 :
140
+ try :
141
+ i = ordered_roles .index ('Mafia' )
142
+ ordered_roles [i ] = 'Kind Wife'
143
+ except ValueError :
144
+ pass
145
+ return ordered_roles
146
+
147
+
68
148
if __name__ == "__main__" :
69
149
if len (argv ) < 2 or argv [1 ] in ['--help' , 'help' , '-h' ]:
70
150
help_me ()
71
151
nPlayers = int (argv [1 ])
72
152
if nPlayers > len (ordered_roles ):
73
153
print ("Too many players, mafia doesn't support a game with" , nPlayers , "player." )
74
154
help_me ()
75
- roles = ordered_roles [:nPlayers ]
155
+ roles = give_me_roles ( ordered_roles [:nPlayers ])
76
156
shuffle (roles )
77
- app .run (host = "0.0.0.0" , \
78
- port = 5000 , \
79
- debug = True )
157
+ chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789!@#$%^&*()"
158
+ for i in range (4 ):
159
+ preshared_key += chars [randrange (0 , len (chars ))]
160
+ print ("_" * 20 + "GOD's password" + "_" * 20 )
161
+ print (preshared_key )
162
+ print ("_" * 54 )
163
+ app .run (host = "0.0.0.0" ,
164
+ port = 5000 ,
165
+ debug = True ,
166
+ use_reloader = False )
0 commit comments