write errors in the chat during debug
This commit is contained in:
parent
1ea91af237
commit
60ef42f98a
@ -13,11 +13,16 @@ import requests
|
|||||||
from discord_webhook import DiscordWebhook
|
from discord_webhook import DiscordWebhook
|
||||||
from metrics import Metrics
|
from metrics import Metrics
|
||||||
|
|
||||||
Metrics.init()
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import traceback
|
||||||
sys.setrecursionlimit(10**6) # this should prevents bots from stopping
|
sys.setrecursionlimit(10**6) # this should prevents bots from stopping
|
||||||
|
|
||||||
|
import logging
|
||||||
|
logger = logging.basicConfig(filename='out.log', level='ERROR')
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
Metrics.init()
|
||||||
|
|
||||||
sio = socketio.Server(cors_allowed_origins="*")
|
sio = socketio.Server(cors_allowed_origins="*")
|
||||||
|
|
||||||
static_files={
|
static_files={
|
||||||
@ -44,6 +49,22 @@ games: List[Game] = []
|
|||||||
online_players = 0
|
online_players = 0
|
||||||
blacklist: List[str] = []
|
blacklist: List[str] = []
|
||||||
|
|
||||||
|
def send_to_debug(error):
|
||||||
|
for g in games:
|
||||||
|
if g.debug or any((p.is_admin() for p in g.players)):
|
||||||
|
sio.emit('chat_message', room=g.name, data={'color': f'red','text':json.dumps({'ERROR':error}), 'type':'json'})
|
||||||
|
|
||||||
|
def bang_handler(func):
|
||||||
|
@wraps(func)
|
||||||
|
def wrapper_func(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
func(*args, **kwargs)
|
||||||
|
except Exception as e:
|
||||||
|
logging.exception(e)
|
||||||
|
print(traceback.format_exc())
|
||||||
|
send_to_debug(traceback.format_exc())
|
||||||
|
return wrapper_func
|
||||||
|
|
||||||
def advertise_lobbies():
|
def advertise_lobbies():
|
||||||
sio.emit('lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if not g.started and len(g.players) < 10 and not g.is_hidden])
|
sio.emit('lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if not g.started and len(g.players) < 10 and not g.is_hidden])
|
||||||
sio.emit('spectate_lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if g.started and not g.is_hidden])
|
sio.emit('spectate_lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if g.started and not g.is_hidden])
|
||||||
@ -51,6 +72,7 @@ def advertise_lobbies():
|
|||||||
Metrics.send_metric('online_players', points=[online_players])
|
Metrics.send_metric('online_players', points=[online_players])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def connect(sid, environ):
|
def connect(sid, environ):
|
||||||
global online_players
|
global online_players
|
||||||
online_players += 1
|
online_players += 1
|
||||||
@ -60,11 +82,13 @@ def connect(sid, environ):
|
|||||||
Metrics.send_metric('online_players', points=[online_players])
|
Metrics.send_metric('online_players', points=[online_players])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_online_players(sid):
|
def get_online_players(sid):
|
||||||
global online_players
|
global online_players
|
||||||
sio.emit('players', room='lobby', data=online_players)
|
sio.emit('players', room='lobby', data=online_players)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def report(sid, text):
|
def report(sid, text):
|
||||||
print(f'New report from {sid}: {text}')
|
print(f'New report from {sid}: {text}')
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
@ -85,6 +109,7 @@ def report(sid, text):
|
|||||||
print(f'New bug report, replay at https://bang.xamin.it/game?replay={key}')
|
print(f'New bug report, replay at https://bang.xamin.it/game?replay={key}')
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def set_username(sid, username):
|
def set_username(sid, username):
|
||||||
ses = sio.get_session(sid)
|
ses = sio.get_session(sid)
|
||||||
if not isinstance(ses, Player):
|
if not isinstance(ses, Player):
|
||||||
@ -105,6 +130,7 @@ def set_username(sid, username):
|
|||||||
ses.game.notify_room()
|
ses.game.notify_room()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_me(sid, room):
|
def get_me(sid, room):
|
||||||
if isinstance(sio.get_session(sid), Player):
|
if isinstance(sio.get_session(sid), Player):
|
||||||
sio.emit('me', data=sio.get_session(sid).name, room=sid)
|
sio.emit('me', data=sio.get_session(sid).name, room=sid)
|
||||||
@ -174,6 +200,7 @@ def get_me(sid, room):
|
|||||||
sio.get_session(sid).game.notify_room()
|
sio.get_session(sid).game.notify_room()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def disconnect(sid):
|
def disconnect(sid):
|
||||||
global online_players
|
global online_players
|
||||||
online_players -= 1
|
online_players -= 1
|
||||||
@ -187,6 +214,7 @@ def disconnect(sid):
|
|||||||
Metrics.send_metric('online_players', points=[online_players])
|
Metrics.send_metric('online_players', points=[online_players])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def create_room(sid, room_name):
|
def create_room(sid, room_name):
|
||||||
if sio.get_session(sid).game == None:
|
if sio.get_session(sid).game == None:
|
||||||
while len([g for g in games if g.name == room_name]):
|
while len([g for g in games if g.name == room_name]):
|
||||||
@ -202,25 +230,30 @@ def create_room(sid, room_name):
|
|||||||
advertise_lobbies()
|
advertise_lobbies()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def private(sid):
|
def private(sid):
|
||||||
g = sio.get_session(sid).game
|
g = sio.get_session(sid).game
|
||||||
g.set_private()
|
g.set_private()
|
||||||
advertise_lobbies()
|
advertise_lobbies()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def toggle_expansion(sid, expansion_name):
|
def toggle_expansion(sid, expansion_name):
|
||||||
g = sio.get_session(sid).game
|
g = sio.get_session(sid).game
|
||||||
g.toggle_expansion(expansion_name)
|
g.toggle_expansion(expansion_name)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def toggle_comp(sid):
|
def toggle_comp(sid):
|
||||||
sio.get_session(sid).game.toggle_competitive()
|
sio.get_session(sid).game.toggle_competitive()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def toggle_replace_with_bot(sid):
|
def toggle_replace_with_bot(sid):
|
||||||
sio.get_session(sid).game.toggle_disconnect_bot()
|
sio.get_session(sid).game.toggle_disconnect_bot()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def join_room(sid, room):
|
def join_room(sid, room):
|
||||||
room_name = room['name']
|
room_name = room['name']
|
||||||
i = [g.name for g in games].index(room_name)
|
i = [g.name for g in games].index(room_name)
|
||||||
@ -250,6 +283,7 @@ Sockets for the status page
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_all_rooms(sid, deploy_key):
|
def get_all_rooms(sid, deploy_key):
|
||||||
if ('DEPLOY_KEY' in os.environ and deploy_key == os.environ['DEPLOY_KEY']) or sio.get_session(sid).is_admin():
|
if ('DEPLOY_KEY' in os.environ and deploy_key == os.environ['DEPLOY_KEY']) or sio.get_session(sid).is_admin():
|
||||||
sio.emit('all_rooms', room=sid, data=[{
|
sio.emit('all_rooms', room=sid, data=[{
|
||||||
@ -266,11 +300,13 @@ def get_all_rooms(sid, deploy_key):
|
|||||||
} for g in games])
|
} for g in games])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def kick(sid, data):
|
def kick(sid, data):
|
||||||
if ('DEPLOY_KEY' in os.environ and data['key'] == os.environ['DEPLOY_KEY']) or sio.get_session(sid).is_admin():
|
if ('DEPLOY_KEY' in os.environ and data['key'] == os.environ['DEPLOY_KEY']) or sio.get_session(sid).is_admin():
|
||||||
sio.emit('kicked', room=data['sid'])
|
sio.emit('kicked', room=data['sid'])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def hide_toogle(sid, data):
|
def hide_toogle(sid, data):
|
||||||
if ('DEPLOY_KEY' in os.environ and data['key'] == os.environ['DEPLOY_KEY']) or sio.get_session(sid).is_admin():
|
if ('DEPLOY_KEY' in os.environ and data['key'] == os.environ['DEPLOY_KEY']) or sio.get_session(sid).is_admin():
|
||||||
game = [g for g in games if g.name==data['room']]
|
game = [g for g in games if g.name==data['room']]
|
||||||
@ -288,12 +324,14 @@ Sockets for the game
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def start_game(sid):
|
def start_game(sid):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.start_game()
|
ses.game.start_game()
|
||||||
advertise_lobbies()
|
advertise_lobbies()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def set_character(sid, name):
|
def set_character(sid, name):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};set_character;{name}')
|
ses.game.rpc_log.append(f'{ses.name};set_character;{name}')
|
||||||
@ -302,47 +340,55 @@ def set_character(sid, name):
|
|||||||
ses.set_character(name)
|
ses.set_character(name)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def refresh(sid):
|
def refresh(sid):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.notify_self()
|
ses.notify_self()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def draw(sid, pile):
|
def draw(sid, pile):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};draw;{pile}')
|
ses.game.rpc_log.append(f'{ses.name};draw;{pile}')
|
||||||
ses.draw(pile)
|
ses.draw(pile)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def pick(sid):
|
def pick(sid):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};pick')
|
ses.game.rpc_log.append(f'{ses.name};pick')
|
||||||
ses.pick()
|
ses.pick()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def end_turn(sid):
|
def end_turn(sid):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};end_turn')
|
ses.game.rpc_log.append(f'{ses.name};end_turn')
|
||||||
ses.end_turn()
|
ses.end_turn()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def play_card(sid, data):
|
def play_card(sid, data):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};play_card;{json.dumps(data)}')
|
ses.game.rpc_log.append(f'{ses.name};play_card;{json.dumps(data)}')
|
||||||
ses.play_card(data['index'], data['against'], data['with'])
|
ses.play_card(data['index'], data['against'], data['with'])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def respond(sid, card_index):
|
def respond(sid, card_index):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};respond;{card_index}')
|
ses.game.rpc_log.append(f'{ses.name};respond;{card_index}')
|
||||||
ses.respond(card_index)
|
ses.respond(card_index)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def choose(sid, card_index):
|
def choose(sid, card_index):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};choose;{card_index}')
|
ses.game.rpc_log.append(f'{ses.name};choose;{card_index}')
|
||||||
ses.choose(card_index)
|
ses.choose(card_index)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def scrap(sid, card_index):
|
def scrap(sid, card_index):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};scrap;{card_index}')
|
ses.game.rpc_log.append(f'{ses.name};scrap;{card_index}')
|
||||||
@ -355,18 +401,21 @@ def special(sid, data):
|
|||||||
ses.special(data)
|
ses.special(data)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def gold_rush_discard(sid):
|
def gold_rush_discard(sid):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};gold_rush_discard;')
|
ses.game.rpc_log.append(f'{ses.name};gold_rush_discard;')
|
||||||
ses.gold_rush_discard()
|
ses.gold_rush_discard()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def buy_gold_rush_card(sid, data:int):
|
def buy_gold_rush_card(sid, data:int):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};buy_gold_rush_card;{data}')
|
ses.game.rpc_log.append(f'{ses.name};buy_gold_rush_card;{data}')
|
||||||
ses.buy_gold_rush_card(data)
|
ses.buy_gold_rush_card(data)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def chat_message(sid, msg, pl=None):
|
def chat_message(sid, msg, pl=None):
|
||||||
ses: Player = sio.get_session(sid) if pl is None else pl
|
ses: Player = sio.get_session(sid) if pl is None else pl
|
||||||
ses.game.rpc_log.append(f'{ses.name};chat_message;{msg}')
|
ses.game.rpc_log.append(f'{ses.name};chat_message;{msg}')
|
||||||
@ -611,6 +660,7 @@ Sockets for the help screen
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_cards(sid):
|
def get_cards(sid):
|
||||||
import bang.cards as c
|
import bang.cards as c
|
||||||
cards = c.get_starting_deck(['dodge_city'])
|
cards = c.get_starting_deck(['dodge_city'])
|
||||||
@ -623,12 +673,14 @@ def get_cards(sid):
|
|||||||
Metrics.send_metric('help_screen_viewed', points=[1])
|
Metrics.send_metric('help_screen_viewed', points=[1])
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_characters(sid):
|
def get_characters(sid):
|
||||||
import bang.characters as ch
|
import bang.characters as ch
|
||||||
cards = ch.all_characters(['dodge_city', 'gold_rush'])
|
cards = ch.all_characters(['dodge_city', 'gold_rush'])
|
||||||
sio.emit('characters_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
|
sio.emit('characters_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_highnooncards(sid):
|
def get_highnooncards(sid):
|
||||||
import bang.expansions.high_noon.card_events as ceh
|
import bang.expansions.high_noon.card_events as ceh
|
||||||
chs = []
|
chs = []
|
||||||
@ -637,6 +689,7 @@ def get_highnooncards(sid):
|
|||||||
sio.emit('highnooncards_info', room=sid, data=json.dumps(chs, default=lambda o: o.__dict__))
|
sio.emit('highnooncards_info', room=sid, data=json.dumps(chs, default=lambda o: o.__dict__))
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_foccards(sid):
|
def get_foccards(sid):
|
||||||
import bang.expansions.fistful_of_cards.card_events as ce
|
import bang.expansions.fistful_of_cards.card_events as ce
|
||||||
chs = []
|
chs = []
|
||||||
@ -645,6 +698,7 @@ def get_foccards(sid):
|
|||||||
sio.emit('foccards_info', room=sid, data=json.dumps(chs, default=lambda o: o.__dict__))
|
sio.emit('foccards_info', room=sid, data=json.dumps(chs, default=lambda o: o.__dict__))
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_goldrushcards(sid):
|
def get_goldrushcards(sid):
|
||||||
import bang.expansions.gold_rush.shop_cards as grc
|
import bang.expansions.gold_rush.shop_cards as grc
|
||||||
cards = grc.get_cards()
|
cards = grc.get_cards()
|
||||||
@ -656,6 +710,7 @@ def get_goldrushcards(sid):
|
|||||||
sio.emit('goldrushcards_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
|
sio.emit('goldrushcards_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def get_valleyofshadowscards(sid):
|
def get_valleyofshadowscards(sid):
|
||||||
import bang.expansions.the_valley_of_shadows.cards as tvos
|
import bang.expansions.the_valley_of_shadows.cards as tvos
|
||||||
cards = tvos.get_starting_deck()
|
cards = tvos.get_starting_deck()
|
||||||
@ -667,6 +722,7 @@ def get_valleyofshadowscards(sid):
|
|||||||
sio.emit('valleyofshadows_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
|
sio.emit('valleyofshadows_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__))
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
@bang_handler
|
||||||
def discord_auth(sid, data):
|
def discord_auth(sid, data):
|
||||||
res = requests.post('https://discord.com/api/oauth2/token', data={
|
res = requests.post('https://discord.com/api/oauth2/token', data={
|
||||||
'client_id': '1059452581027532880',
|
'client_id': '1059452581027532880',
|
||||||
|
Loading…
Reference in New Issue
Block a user