forked from nortti/tea_cah
Do +v/-v
This commit is contained in:
parent
46084d4f64
commit
3d29e2c994
28
botcmd.py
28
botcmd.py
|
@ -10,6 +10,22 @@ irc_chan = None
|
|||
|
||||
game_channel = None
|
||||
|
||||
def chunk(l, n):
|
||||
assert 0 < n
|
||||
chunked = []
|
||||
|
||||
item = []
|
||||
for i in l:
|
||||
if len(item) >= n:
|
||||
chunked.append(item)
|
||||
item = []
|
||||
item.append(i)
|
||||
|
||||
if len(item) > 0:
|
||||
chunked.append(item)
|
||||
|
||||
return chunked
|
||||
|
||||
class GameLoop(threading.Thread):
|
||||
def __init__(self, irc, chan, irc_chan):
|
||||
self.irc = irc
|
||||
|
@ -58,9 +74,19 @@ class GameLoop(threading.Thread):
|
|||
event = self.chan.recv()
|
||||
return event
|
||||
|
||||
def voice(self, nicks):
|
||||
if type(nicks) == str: nicks = [nicks]
|
||||
for nicks in chunk(nicks, 4):
|
||||
self.irc.send_raw(b'MODE %s +%s %s' % (self.irc_chan, b'v'*len(nicks), b' '.join(i.encode() for i in nicks)))
|
||||
|
||||
def devoice(self, nicks):
|
||||
if type(nicks) == str: nicks = [nicks]
|
||||
for nicks in chunk(nicks, 4):
|
||||
self.irc.send_raw(b'MODE %s -%s %s' % (self.irc_chan, b'v'*len(nicks), b' '.join(i.encode() for i in nicks)))
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
gameloop.game(self.send, self.notice, self.get_event)
|
||||
gameloop.game(self.send, self.notice, self.voice, self.devoice, self.get_event)
|
||||
except Exception as err:
|
||||
self.send('Crash! (%s, %s)' % (type(err), repr(err)))
|
||||
finally:
|
||||
|
|
140
gameloop.py
140
gameloop.py
|
@ -33,73 +33,9 @@ class Player:
|
|||
def __hash__(self):
|
||||
return id(self)
|
||||
|
||||
def get_event():
|
||||
while True:
|
||||
try:
|
||||
t = input('> ')
|
||||
except EOFError:
|
||||
return (events.quit,)
|
||||
|
||||
if t == 'nick':
|
||||
old = input('old> ')
|
||||
new = input('new> ')
|
||||
return (events.nick_change, old, new)
|
||||
elif t == 'start':
|
||||
nick = input('nick> ')
|
||||
return (events.start, nick)
|
||||
elif t == 'ready':
|
||||
nick = input('nick> ')
|
||||
return (events.ready, nick)
|
||||
elif t == 'unready':
|
||||
nick = input('nick> ')
|
||||
return (events.unready, nick)
|
||||
elif t == 'status':
|
||||
return (events.status,)
|
||||
elif t == 'kill':
|
||||
return (events.kill,)
|
||||
elif t == 'join':
|
||||
nick = input('nick> ')
|
||||
return (events.join, nick)
|
||||
elif t == 'leave':
|
||||
nick = input('nick> ')
|
||||
return (events.leave, nick)
|
||||
elif t == 'players':
|
||||
return (events.players,)
|
||||
elif t == 'deck add':
|
||||
code = input('code> ')
|
||||
return (events.deck_add, code)
|
||||
elif t == 'deck add random':
|
||||
return (events.deck_add_random,)
|
||||
elif t == 'deck remove':
|
||||
code = input('code> ')
|
||||
return (events.deck_remove, code)
|
||||
elif t == 'deck list':
|
||||
return (events.deck_list,)
|
||||
elif t == 'limit':
|
||||
return (events.limit,)
|
||||
elif t == 'limit_set':
|
||||
limit_type = {'r': limit_types.rounds, 'p': limit_types.points}[input('type (p/r)> ')]
|
||||
number = int(input('limit> '))
|
||||
return (events.limit, limit_type, number)
|
||||
elif t == 'card':
|
||||
nick = input('nick> ')
|
||||
choice = [int(i) for i in input('choice> ').split()]
|
||||
return (events.card, nick, choice)
|
||||
elif t == 'cards':
|
||||
nick = input('nick> ')
|
||||
return (events.cards, nick)
|
||||
else:
|
||||
print('?')
|
||||
|
||||
def send(text):
|
||||
print(text)
|
||||
|
||||
def notice(nick, text):
|
||||
print('\t', nick, text)
|
||||
|
||||
class Error: pass
|
||||
|
||||
def game(send, notice, get_event):
|
||||
def game(send, notice, voice, devoice, get_event):
|
||||
def error(message):
|
||||
send('Error: %s' % message)
|
||||
|
||||
|
@ -262,6 +198,7 @@ def game(send, notice, get_event):
|
|||
nick, = args
|
||||
if nick not in players:
|
||||
add_player(nick)
|
||||
voice(nick)
|
||||
send('%s has joined' % nick)
|
||||
else:
|
||||
send('%s has already joined' % nick)
|
||||
|
@ -272,6 +209,7 @@ def game(send, notice, get_event):
|
|||
send('No such player %s' % nick)
|
||||
|
||||
elif errwrapper('Could not remove player %s (%%s)' % nick, remove_player, nick) is not Error:
|
||||
devoice(nick)
|
||||
send('%s has left the game' % nick)
|
||||
|
||||
elif event == events.players:
|
||||
|
@ -318,6 +256,9 @@ def game(send, notice, get_event):
|
|||
|
||||
def no_game():
|
||||
nonlocal players, decks, limit, round_number, round_call_card, czar, card_choices
|
||||
if players is not None:
|
||||
devoice(players)
|
||||
|
||||
players = {}
|
||||
decks = {}
|
||||
limit = Limit(limit_types.points, 5)
|
||||
|
@ -336,6 +277,7 @@ def game(send, notice, get_event):
|
|||
nick, *rest = args
|
||||
|
||||
add_player(nick)
|
||||
voice(nick)
|
||||
|
||||
send('%s started a game, !join to join!' % nick)
|
||||
|
||||
|
@ -801,4 +743,70 @@ def game(send, notice, get_event):
|
|||
state = state()
|
||||
|
||||
if __name__ == '__main__':
|
||||
game(send, notice, get_event)
|
||||
def get_event():
|
||||
while True:
|
||||
try:
|
||||
t = input('> ')
|
||||
except EOFError:
|
||||
return (events.quit,)
|
||||
|
||||
if t == 'nick':
|
||||
old = input('old> ')
|
||||
new = input('new> ')
|
||||
return (events.nick_change, old, new)
|
||||
elif t == 'start':
|
||||
nick = input('nick> ')
|
||||
return (events.start, nick)
|
||||
elif t == 'ready':
|
||||
nick = input('nick> ')
|
||||
return (events.ready, nick)
|
||||
elif t == 'unready':
|
||||
nick = input('nick> ')
|
||||
return (events.unready, nick)
|
||||
elif t == 'status':
|
||||
return (events.status,)
|
||||
elif t == 'kill':
|
||||
return (events.kill,)
|
||||
elif t == 'join':
|
||||
nick = input('nick> ')
|
||||
return (events.join, nick)
|
||||
elif t == 'leave':
|
||||
nick = input('nick> ')
|
||||
return (events.leave, nick)
|
||||
elif t == 'players':
|
||||
return (events.players,)
|
||||
elif t == 'deck add':
|
||||
code = input('code> ')
|
||||
return (events.deck_add, code)
|
||||
elif t == 'deck add random':
|
||||
return (events.deck_add_random,)
|
||||
elif t == 'deck remove':
|
||||
code = input('code> ')
|
||||
return (events.deck_remove, code)
|
||||
elif t == 'deck list':
|
||||
return (events.deck_list,)
|
||||
elif t == 'limit':
|
||||
return (events.limit,)
|
||||
elif t == 'limit_set':
|
||||
limit_type = {'r': limit_types.rounds, 'p': limit_types.points}[input('type (p/r)> ')]
|
||||
number = int(input('limit> '))
|
||||
return (events.limit, limit_type, number)
|
||||
elif t == 'card':
|
||||
nick = input('nick> ')
|
||||
choice = [int(i) for i in input('choice> ').split()]
|
||||
return (events.card, nick, choice)
|
||||
elif t == 'cards':
|
||||
nick = input('nick> ')
|
||||
return (events.cards, nick)
|
||||
else:
|
||||
print('?')
|
||||
|
||||
def send(text):
|
||||
print(text)
|
||||
|
||||
def notice(nick, text):
|
||||
print('\t', nick, text)
|
||||
|
||||
def nop(*args, **kwargs): pass
|
||||
|
||||
game(send, notice, nop, nop, get_event)
|
||||
|
|
Loading…
Reference in New Issue