replay on hastebin and discord
This commit is contained in:
parent
1fe7f05680
commit
7779066e9b
@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import random
|
import random
|
||||||
|
from tests.dummy_socket import DummySocket
|
||||||
from typing import List
|
from typing import List
|
||||||
import eventlet
|
import eventlet
|
||||||
import socketio
|
import socketio
|
||||||
@ -8,6 +9,9 @@ import socketio
|
|||||||
from bang.game import Game
|
from bang.game import Game
|
||||||
from bang.players import Player, PendingAction
|
from bang.players import Player, PendingAction
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from discord_webhook import DiscordWebhook
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
sys.setrecursionlimit(10**6) # this should prevents bots from stopping
|
sys.setrecursionlimit(10**6) # this should prevents bots from stopping
|
||||||
|
|
||||||
@ -236,7 +240,6 @@ Sockets for the game
|
|||||||
@sio.event
|
@sio.event
|
||||||
def start_game(sid):
|
def start_game(sid):
|
||||||
ses: Player = sio.get_session(sid)
|
ses: Player = sio.get_session(sid)
|
||||||
ses.game.rpc_log.append(f'{ses.name};start_game')
|
|
||||||
ses.game.start_game()
|
ses.game.start_game()
|
||||||
advertise_lobbies()
|
advertise_lobbies()
|
||||||
|
|
||||||
@ -312,8 +315,8 @@ def buy_gold_rush_card(sid, data:int):
|
|||||||
ses.buy_gold_rush_card(data)
|
ses.buy_gold_rush_card(data)
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
def chat_message(sid, msg):
|
def chat_message(sid, msg, pl=None):
|
||||||
ses: Player = sio.get_session(sid)
|
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}')
|
||||||
if len(msg) > 0:
|
if len(msg) > 0:
|
||||||
if msg[0] == '/':
|
if msg[0] == '/':
|
||||||
@ -331,38 +334,61 @@ def chat_message(sid, msg):
|
|||||||
ses.game.add_player(bot)
|
ses.game.add_player(bot)
|
||||||
bot.bot_spin()
|
bot.bot_spin()
|
||||||
return
|
return
|
||||||
|
if '/report' in msg and not ses.game.is_replay:
|
||||||
|
data = "\n".join(ses.game.rpc_log).strip()
|
||||||
|
response = requests.post("http://hastebin.com/documents", data)
|
||||||
|
key = json.loads(response.text).get('key')
|
||||||
|
webhook = DiscordWebhook(url=os.environ['DISCORD_WEBHOOK'], content=f'New bug report, replay at https://hastebin.com/{key}')
|
||||||
|
response = webhook.execute()
|
||||||
|
return
|
||||||
if '/replay' in msg:
|
if '/replay' in msg:
|
||||||
for i in range(len(ses.game.rpc_log)):
|
_cmd = msg.split()
|
||||||
print('replay:', i, 'of', len(ses.game.rpc_log))
|
if len(_cmd) == 2:
|
||||||
cmd = ses.game.rpc_log[i].split(';')
|
replay_id = _cmd[1]
|
||||||
player = [p for p in ses.game.players if p.name == cmd[0]][0]
|
response = requests.get(f"http://hastebin.com/raw/{replay_id}")
|
||||||
if cmd[1] == 'start_game':
|
log = response.text.splitlines()
|
||||||
ses.game.start_game(ses.game.SEED)
|
ses.game.spectators.append(ses)
|
||||||
if cmd[1] == 'set_character':
|
ses.game.players = []
|
||||||
set_character(player.sid, cmd[2])
|
ses.game.is_replay = True
|
||||||
if cmd[1] == 'draw':
|
for i in range(len(log)):
|
||||||
draw(player.sid, cmd[2])
|
print('replay:', i, 'of', len(log))
|
||||||
if cmd[1] == 'pick':
|
cmd = log[i].split(';')
|
||||||
pick(player.sid)
|
if cmd[1] == 'players':
|
||||||
if cmd[1] == 'end_turn':
|
ses.game.expansions = json.loads(cmd[4].replace("'",'"'))
|
||||||
end_turn(player.sid)
|
pnames = json.loads(cmd[3].replace("'",'"'))
|
||||||
if cmd[1] == 'play_card':
|
for p in pnames:
|
||||||
play_card(player.sid, json.loads(cmd[2]))
|
ses.game.add_player(Player(p, p, DummySocket(), bot=False))
|
||||||
if cmd[1] == 'respond':
|
continue
|
||||||
respond(player.sid, int(cmd[2]))
|
if cmd[1] == 'start_game':
|
||||||
if cmd[1] == 'choose':
|
ses.game.start_game(int(cmd[2]))
|
||||||
choose(player.sid, int(cmd[2]))
|
continue
|
||||||
if cmd[1] == 'scrap':
|
player = [p for p in ses.game.players if p.name == cmd[0]][0]
|
||||||
scrap(player.sid, int(cmd[2]))
|
if cmd[1] == 'set_character':
|
||||||
if cmd[1] == 'special':
|
player.set_character(cmd[2])
|
||||||
special(player.sid, json.loads(cmd[2]))
|
if cmd[1] == 'draw':
|
||||||
if cmd[1] == 'gold_rush_discard':
|
player.draw(cmd[2])
|
||||||
gold_rush_discard(player.sid)
|
if cmd[1] == 'pick':
|
||||||
if cmd[1] == 'buy_gold_rush_card':
|
player.pick()
|
||||||
buy_gold_rush_card(player.sid, int(cmd[2]))
|
if cmd[1] == 'end_turn':
|
||||||
if cmd[1] == 'chat_message':
|
player.end_turn()
|
||||||
chat_message(player.sid, cmd[2])
|
if cmd[1] == 'play_card':
|
||||||
eventlet.sleep(1)
|
data = json.loads(cmd[2])
|
||||||
|
player.play_card(data['index'], data['against'], data['with'])
|
||||||
|
if cmd[1] == 'respond':
|
||||||
|
player.respond(int(cmd[2]))
|
||||||
|
if cmd[1] == 'choose':
|
||||||
|
player.choose(int(cmd[2]))
|
||||||
|
if cmd[1] == 'scrap':
|
||||||
|
player.scrap(int(cmd[2]))
|
||||||
|
if cmd[1] == 'special':
|
||||||
|
player.special(json.loads(cmd[2]))
|
||||||
|
if cmd[1] == 'gold_rush_discard':
|
||||||
|
player.gold_rush_discard()
|
||||||
|
if cmd[1] == 'buy_gold_rush_card':
|
||||||
|
player.buy_gold_rush_card(int(cmd[2]))
|
||||||
|
if cmd[1] == 'chat_message':
|
||||||
|
chat_message(None, cmd[2], player)
|
||||||
|
eventlet.sleep(1)
|
||||||
if '/startwithseed' in msg and not ses.game.started:
|
if '/startwithseed' in msg and not ses.game.started:
|
||||||
if len(msg.split()) > 1:
|
if len(msg.split()) > 1:
|
||||||
ses.game.start_game(int(msg.split()[1]))
|
ses.game.start_game(int(msg.split()[1]))
|
||||||
|
@ -49,6 +49,7 @@ class Game:
|
|||||||
self.is_hidden = False
|
self.is_hidden = False
|
||||||
self.rng = random.Random()
|
self.rng = random.Random()
|
||||||
self.rpc_log = []
|
self.rpc_log = []
|
||||||
|
self.is_replay = False
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
print(f'{self.name}: resetting lobby')
|
print(f'{self.name}: resetting lobby')
|
||||||
@ -192,8 +193,8 @@ class Game:
|
|||||||
SEED = int(time.time())
|
SEED = int(time.time())
|
||||||
print(f'{self.name}: SEED IS {SEED}')
|
print(f'{self.name}: SEED IS {SEED}')
|
||||||
self.SEED = SEED
|
self.SEED = SEED
|
||||||
|
self.rpc_log = [f';players;{len(self.players)};{[p.name for p in self.players]};{self.expansions}', f';start_game;{SEED}']
|
||||||
self.rng = random.Random(SEED)
|
self.rng = random.Random(SEED)
|
||||||
|
|
||||||
self.players_map = {c.name: i for i, c in enumerate(self.players)}
|
self.players_map = {c.name: i for i, c in enumerate(self.players)}
|
||||||
self.sio.emit('chat_message', room=self.name, data=f'_starting')
|
self.sio.emit('chat_message', room=self.name, data=f'_starting')
|
||||||
self.sio.emit('start', room=self.name)
|
self.sio.emit('start', room=self.name)
|
||||||
|
@ -5,4 +5,6 @@ greenlet==1.1.1
|
|||||||
python-engineio==3.14.2
|
python-engineio==3.14.2
|
||||||
python-socketio==4.6.1
|
python-socketio==4.6.1
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
pytest==6.2.4
|
pytest==6.2.4
|
||||||
|
requests==2.26.0
|
||||||
|
discord-webhook==0.14.0
|
Loading…
Reference in New Issue
Block a user