added real player names to draft pool (slow) and fixed #238
This commit is contained in:
parent
ca8e1d44fc
commit
0953f05471
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -358,3 +358,4 @@ env
|
|||
/data/leagues
|
||||
/simmadome/build
|
||||
/simmadome/.eslintcache
|
||||
/matteo_env/Lib/site-packages
|
||||
|
|
24
real_players.py
Normal file
24
real_players.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
from lxml import html
|
||||
import requests, json
|
||||
import onomancer as ono
|
||||
|
||||
|
||||
def random_real_player():
|
||||
name = []
|
||||
while name == []:
|
||||
page = requests.get("http://www.baseball-reference.com/rand.fcgi")
|
||||
tree = html.fromstring(page.content)
|
||||
name = tree.xpath("//h1[@itemprop='name']/span/text()")
|
||||
if len(name) > 0 and len(name[0]) == 4:
|
||||
name = [] #gets rid of years
|
||||
name = name[0]
|
||||
return name
|
||||
|
||||
def get_real_players(num):
|
||||
names = []
|
||||
for i in range(0, num):
|
||||
names.append(random_real_player())
|
||||
players = {}
|
||||
for name in names:
|
||||
players[name] = json.loads(ono.get_stats(name))
|
||||
return players
|
|
@ -46,6 +46,9 @@
|
|||
<Compile Include="games.py">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="real_players.py">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="roman.py" />
|
||||
<Compile Include="the_draft.py" />
|
||||
<Compile Include="the_prestige.py" />
|
||||
|
|
19
the_draft.py
19
the_draft.py
|
@ -2,7 +2,7 @@ from collections import namedtuple
|
|||
import games
|
||||
import json
|
||||
import uuid
|
||||
|
||||
import real_players
|
||||
import onomancer
|
||||
|
||||
Participant = namedtuple('Participant', ['handle', 'team'])
|
||||
|
@ -16,19 +16,22 @@ class Draft:
|
|||
"""
|
||||
|
||||
@classmethod
|
||||
def make_draft(cls, teamsize, draftsize, minsize, pitchers):
|
||||
draft = cls(teamsize, draftsize, minsize, pitchers)
|
||||
def make_draft(cls, teamsize, draftsize, minsize, pitchers, ono_ratio):
|
||||
draft = cls(teamsize, draftsize, minsize, pitchers, ono_ratio)
|
||||
return draft
|
||||
|
||||
def __init__(self, teamsize, draftsize, minsize, pitchers):
|
||||
self.DRAFT_SIZE = draftsize
|
||||
def __init__(self, teamsize, draftsize, minsize, pitchers, ono_ratio):
|
||||
self.DRAFT_SIZE = int(draftsize * ono_ratio)
|
||||
self.REAL_SIZE = draftsize - self.DRAFT_SIZE
|
||||
self.REFRESH_DRAFT_SIZE = minsize # fewer players remaining than this and the list refreshes
|
||||
self.DRAFT_ROUNDS = teamsize
|
||||
self.pitchers = pitchers
|
||||
self._id = str(uuid.uuid4())[:6]
|
||||
self._participants = []
|
||||
self._active_participant = BOOKMARK # draft mutex
|
||||
self._players = onomancer.get_names(limit=self.DRAFT_SIZE)
|
||||
nameslist = onomancer.get_names(limit=self.DRAFT_SIZE)
|
||||
nameslist.update(real_players.get_real_players(self.REAL_SIZE))
|
||||
self._players = nameslist
|
||||
self._round = 0
|
||||
|
||||
@property
|
||||
|
@ -68,7 +71,9 @@ class Draft:
|
|||
self.advance_draft()
|
||||
|
||||
def refresh_players(self):
|
||||
self._players = onomancer.get_names(limit=self.DRAFT_SIZE)
|
||||
nameslist = onomancer.get_names(limit=self.DRAFT_SIZE)
|
||||
nameslist.update(real_players.get_real_players(self.REAL_SIZE))
|
||||
self._players = nameslist
|
||||
|
||||
def advance_draft(self):
|
||||
"""
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import discord, json, math, os, roman, games, asyncio, random, main_controller, threading, time, urllib, leagues, datetime, gametext
|
||||
import discord, json, math, os, roman, games, asyncio, random, main_controller, threading, time, urllib, leagues, datetime, gametext, real_players
|
||||
import database as db
|
||||
import onomancer as ono
|
||||
from league_storage import league_exists, season_save, season_restart
|
||||
|
@ -646,10 +646,12 @@ class StartDraftCommand(Command):
|
|||
draftsize = 20
|
||||
minsize = 4
|
||||
pitchers = 3
|
||||
ono_ratio = 0.5
|
||||
timeout = 120
|
||||
|
||||
for flag in flags:
|
||||
try:
|
||||
if flag[0] == "t":
|
||||
if flag[0] == "t":
|
||||
teamsize = int(flag[1])
|
||||
elif flag[0] == "d":
|
||||
draftsize = int(flag[1])
|
||||
|
@ -657,10 +659,16 @@ class StartDraftCommand(Command):
|
|||
minsize = int(flag[1])
|
||||
elif flag[0] == "p":
|
||||
pitchers = int(flag[1])
|
||||
elif flag[0] == "c":
|
||||
ono_ratio = float(flag[1])
|
||||
if ono_ratio > 1 or ono_ratio < 0:
|
||||
raise CommandError("The Chaos value needs to be between 0 and 1, chief. Probability has rules.")
|
||||
elif flag[0] == "w": #wait
|
||||
timeout = int(flag[1])
|
||||
else:
|
||||
raise CommandError(f"We don't recognize that {flag[0]} flag.")
|
||||
except ValueError:
|
||||
raise CommandError(f"Your {flag[0]} flag isn't a valid integer, boss.")
|
||||
raise CommandError(f"Your {flag[0]} flag isn't a valid nummber, boss.")
|
||||
|
||||
if teamsize-pitchers > 20 or pitchers > 8:
|
||||
raise CommandError("You can't fit that many players on a team, chief. Slow your roll.")
|
||||
|
@ -669,7 +677,13 @@ class StartDraftCommand(Command):
|
|||
if draftsize > 40:
|
||||
raise CommandError("40 players is the max. We're not too confident about pushing for more.")
|
||||
|
||||
draft = Draft.make_draft(teamsize, draftsize, minsize, pitchers)
|
||||
await msg.channel.send("Got it, boss. Give me a sec to find all the paperwork.")
|
||||
|
||||
try:
|
||||
draft = Draft.make_draft(teamsize, draftsize, minsize, pitchers, ono_ratio)
|
||||
except ConnectionError:
|
||||
await msg.channel.send("Baseball Reference isn't playing nice. Could you try again for us in a minute or so?")
|
||||
|
||||
mentions = {f'<@!{m.id}>' for m in msg.mentions}
|
||||
content = msg.content.split('\n')[1:] # drop command out of message
|
||||
if not content or len(content) % 3:
|
||||
|
@ -683,7 +697,7 @@ class StartDraftCommand(Command):
|
|||
handle = mention
|
||||
break
|
||||
else:
|
||||
await msg.channel.send(f"I don't recognize {handle_token}")
|
||||
await msg.channel.send(f"I don't recognize {handle_token}.")
|
||||
return
|
||||
team_name = content[i + 1].strip()
|
||||
if games.get_team(team_name):
|
||||
|
@ -727,7 +741,7 @@ class StartDraftCommand(Command):
|
|||
embed=build_draft_embed(draft.get_draftees(), footer=footer),
|
||||
)
|
||||
try:
|
||||
draft_message = await self.wait_draft(msg.channel, draft)
|
||||
draft_message = await self.wait_draft(msg.channel, draft, timeout)
|
||||
draft.draft_player(f'<@!{draft_message.author.id}>', draft_message.content.split(' ', 1)[1])
|
||||
except SlowDraftError:
|
||||
player = random.choice(draft.get_draftees())
|
||||
|
@ -777,7 +791,7 @@ class StartDraftCommand(Command):
|
|||
return False
|
||||
return False
|
||||
|
||||
async def wait_draft(self, channel, draft):
|
||||
async def wait_draft(self, channel, draft, timeout):
|
||||
|
||||
def check(m):
|
||||
if m.channel != channel:
|
||||
|
@ -790,9 +804,9 @@ class StartDraftCommand(Command):
|
|||
return False
|
||||
|
||||
try:
|
||||
draft_message = await client.wait_for('message', timeout=120.0, check=check)
|
||||
draft_message = await client.wait_for('message', timeout=timeout, check=check)
|
||||
except asyncio.TimeoutError:
|
||||
raise SlowDraftError('Too slow')
|
||||
raise SlowDraftError('Too slow, boss.')
|
||||
return draft_message
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue