@@ -59,49 +59,50 @@ def __post_init__(self):
5959 lock_time = self .server .locals .get ('coalitions' , {}).get ('lock_time' , '1 day' )
6060 with self .pool .connection () as conn :
6161 with conn .transaction ():
62- with closing (conn .cursor ()) as cursor :
63- cursor .execute (f"""
64- SELECT DISTINCT p.discord_id, CASE WHEN b.ucid IS NOT NULL THEN TRUE ELSE FALSE END AS banned,
65- p.manual, c.coalition,
66- CASE WHEN w.player_ucid IS NOT NULL THEN TRUE ELSE FALSE END AS watchlict, p.vip
67- FROM players p LEFT OUTER JOIN bans b ON p.ucid = b.ucid
68- LEFT OUTER JOIN coalitions c
69- ON p.ucid = c.player_ucid
70- AND c.server_name = %s
71- AND c.coalition_join > (NOW() AT TIME ZONE 'UTC' - interval '{ lock_time } ')
72- LEFT OUTER JOIN watchlist w ON p.ucid = w.player_ucid
73- WHERE p.ucid = %s
74- AND COALESCE(b.banned_until, (now() AT TIME ZONE 'utc')) >= (now() AT TIME ZONE 'utc')
75- """ , (self .server .name , self .ucid ))
76- # existing member found?
77- if cursor .rowcount == 1 :
78- row = cursor .fetchone ()
79- self ._member = self .bot .get_member_by_ucid (self .ucid )
80- if self ._member :
81- # special handling for discord-less bots
82- if isinstance (self ._member , discord .Member ):
83- self ._verified = row [2 ]
84- else :
85- self ._verified = True
86- self .banned = row [1 ]
87- if row [3 ]:
88- self .coalition = Coalition (row [3 ])
89- self ._watchlist = row [4 ]
90- self ._vip = row [5 ]
91- else :
92- rules = self .server .locals .get ('rules' )
93- if rules :
94- cursor .execute ("""
95- INSERT INTO messages (sender, player_ucid, message, ack)
96- VALUES (%s, %s, %s, %s)
97- """ , (self .server .locals .get ('server_user' , 'Admin' ), self .ucid , rules ,
98- self .server .locals .get ('accept_rules_on_join' , False )))
99-
100- cursor .execute ("""
101- INSERT INTO players (ucid, discord_id, name, last_seen)
102- VALUES (%s, -1, %s, (now() AT TIME ZONE 'utc'))
103- ON CONFLICT (ucid) DO UPDATE SET name=excluded.name, last_seen=excluded.last_seen
104- """ , (self .ucid , self .name ))
62+ # add new players to the database
63+ conn .execute ("""
64+ INSERT INTO players (ucid, discord_id, name, last_seen)
65+ VALUES (%s, -1, %s, (now() AT TIME ZONE 'utc'))
66+ ON CONFLICT (ucid) DO UPDATE SET name=excluded.name, last_seen=excluded.last_seen
67+ """ , (self .ucid , self .name ))
68+ # get the player information
69+ cursor = conn .execute (f"""
70+ SELECT DISTINCT p.discord_id, CASE WHEN b.ucid IS NOT NULL THEN TRUE ELSE FALSE END AS banned,
71+ p.manual, c.coalition,
72+ CASE WHEN w.player_ucid IS NOT NULL THEN TRUE ELSE FALSE END AS watchlict, p.vip
73+ FROM players p LEFT OUTER JOIN bans b ON p.ucid = b.ucid
74+ LEFT OUTER JOIN coalitions c
75+ ON p.ucid = c.player_ucid
76+ AND c.server_name = %s
77+ AND c.coalition_join > (NOW() AT TIME ZONE 'UTC' - interval '{ lock_time } ')
78+ LEFT OUTER JOIN watchlist w ON p.ucid = w.player_ucid
79+ WHERE p.ucid = %s
80+ AND COALESCE(b.banned_until, (now() AT TIME ZONE 'utc')) >= (now() AT TIME ZONE 'utc')
81+ """ , (self .server .name , self .ucid ))
82+ # existing member found?
83+ if cursor .rowcount == 1 :
84+ row = cursor .fetchone ()
85+ self ._member = self .bot .get_member_by_ucid (self .ucid )
86+ if self ._member :
87+ # special handling for discord-less bots
88+ if isinstance (self ._member , discord .Member ):
89+ self ._verified = row [2 ]
90+ else :
91+ self ._verified = True
92+ self .banned = row [1 ]
93+ if row [3 ]:
94+ self .coalition = Coalition (row [3 ])
95+ self ._watchlist = row [4 ]
96+ self ._vip = row [5 ]
97+ else :
98+ rules = self .server .locals .get ('rules' )
99+ if rules :
100+ cursor .execute ("""
101+ INSERT INTO messages (sender, player_ucid, message, ack)
102+ VALUES (%s, %s, %s, %s)
103+ """ , (self .server .locals .get ('server_user' , 'Admin' ), self .ucid , rules ,
104+ self .server .locals .get ('accept_rules_on_join' , False )))
105+
105106 # if automatch is enabled, try to match the user
106107 if not self .member and self .bot .locals .get ('automatch' , False ):
107108 discord_user = self .bot .match_user ({"ucid" : self .ucid , "name" : self .name })
0 commit comments