Skip to content

Commit 8867847

Browse files
committed
final cleanup, plus adding notes
1 parent e574506 commit 8867847

File tree

6 files changed

+69
-232
lines changed

6 files changed

+69
-232
lines changed

README

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ Build instructions for simcraft can be found at: https://github.com/simulationcr
1414
To register for a Blizzard API key, go here: https://dev.battle.net/
1515
To register a Discord app, go here: https://dev.battle.net/
1616

17-
Further instructions for setting up will be on the wiki (soon)
17+
Further instructions for setting up will be on the wiki (soon)
18+
19+
Note to those who use this code:
20+
When updating simcraft version, update the version of simcraft under the !nerd command in discordbot.py so it is up to date

discordbot.py

Lines changed: 38 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ def get_role(character, server, region):
106106
for i in range(0,7):
107107
try:
108108
x = armory_json['talents'][0]['talents'][i]['spec']['role']
109-
return x
109+
if(x):
110+
return x
110111
except:
111112
print('No role (getrole 1) identifier in tier %s.' % i)
112113
print('Can\'t find role (getRole check1), going second')
@@ -132,7 +133,8 @@ def get_spec(character, server, region):
132133
for i in range(0,7):
133134
try:
134135
x = armory_json['talents'][0]['talents'][i]['spec']['name']
135-
return x
136+
if(x):
137+
return x
136138
except:
137139
print('No spec (getspec 1) identifier in tier %s.' % i)
138140
print('Can\'t find spec (getSpec check1), going second')
@@ -166,87 +168,36 @@ async def on_ready():
166168
@client.event
167169
async def on_message(message):
168170
author = message.author
169-
if message.content.startswith('!sim '):
170-
character = charstrip(message.content, '!sim ').strip()
171-
server = serverstrip(message.content).replace("'", "").strip()
172-
region = regionfind(message.content).strip()
173-
escapeAuthor = author.mention.replace(">", "\>").replace("<", "\<")
174-
print('Looking at %s - %s - %s' % (character, server, region))
175-
if char_exists(character, server, region):
176-
print("Toon exists, moving on")
177-
isDPS = is_dps(character, server, region)
178-
spec = get_spec(character, server, region)
179-
role = get_role(character, server, region)
180-
print('Looking at %s - %s - %s who exists and is a %s' % (character, server, region, spec ))
181-
if (isDPS or spec == 'Shadow'):
182-
if(spec == 'Shadow' or True):
183-
await client.send_message(message.channel, 'Pulling simming stats for %s - %s - %s. Be aware concurrent simulations will slow me down. Be gentle... I\'m delicate :^)' % (character, server, region))
184-
await client.send_message(message.channel, 'Temple Bot takes about 3-5 min to run a sim (longer if multiple sims are going at the same time). I will ping you when I\'m done')
185-
await client.send_message(message.channel, 'Current spec: %s. Armory info last updated %s' % (spec, armory_date(character, server, region)))
186-
await client.send_message(message.channel, '%s: Starting sim. This will take several minutes.' % author.mention)
187-
subprocess.Popen('python3 sim.py %s %s %s %s %s' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
188-
else:
189-
await client.send_message(message.channel, '%s: Sorry, I am a mean temple bot. I only have eyes for Shadow Priests.' % author.mention)
190-
else:
191-
if (role == 'TANK'):
192-
await client.send_message(message.channel, '%s: Sorry, sims for pawn do not work well for Tanks. This is a limitation of SimulationCraft. Have you thought about being Shadow? I like Shadow' % author.mention)
193-
elif (role == 'HEALING'):
194-
await client.send_message(message.channel, '%s: Sorry, sims do not work for healers. This is a limitation of SimulationCraft. Have you thought about being Shadow?' % author.mention)
195-
else:
196-
await client.send_message(message.channel, '%s: Error getting info for character %s-%s-%s. Role not found. Make sure your format is \'!sim charactername-servername-region\'.' % (author.mention, character, server, region))
197-
else:
198-
await client.send_message(message.channel, '%s: Character %s-%s-%s not found. Make sure your format is \'!sim charactername-servername-region\'.' % (author.mention, character, server, region))
199171
if message.content.startswith('!help'):
200172
await client.send_message(message.channel, 'To simulate: \'!sim charactername-servername-region\'. Only US/EU supported. Sims take a few minutes depending on load. You will get a message when it is completed.')
201173
await client.send_message(message.channel, 'Character data is pulled from the Armory, so it may not always be up to date. Please leave in spaces for realm name')
202174
if message.content.startswith('!nerd'):
203175
await client.send_message(message.channel, 'I do very basic 10k sims for a Patchwerk fight, using the talents and gear you last logged out in. Custom sims are not available. If a completely custom sim is of interest to you, go sim yourself!')
204176
await client.send_message(message.channel, 'Temple Bot runs SimulationCraft 715-01 for World of Warcraft 7.1.5 Live (wow build 23360, git build c8f3bd3). Temple Bot runs a modified Simbot 0.9.')
205177
await client.send_message(message.channel, 'Temple Bot runs on a 3 year old computer. Temple Bot is slow. Temple Bot thought it was in retirement. Temple Bot was wrong.')
206-
if message.content.startswith('!dps '):
207-
character = charstrip(message.content, '!dps ').strip()
208-
server = serverstrip(message.content).replace("'", "").strip()
209-
region = regionfind(message.content).strip()
210-
escapeAuthor = author.mention.replace(">", "\>").replace("<", "\<")
211-
print('Looking at %s - %s - %s' % (character, server, region))
212-
if char_exists(character, server, region):
213-
print("Toon exists, moving on")
214-
isDPS = is_dps(character, server, region)
215-
spec = get_spec(character, server, region)
216-
role = get_role(character, server, region)
217-
print('Looking at %s - %s - %s who exists and is a %s' % (character, server, region, spec ))
218-
if (isDPS or spec == 'Shadow'):
219-
if(spec == 'Shadow' or trues):
220-
await client.send_message(message.channel, 'Pulling dps stats for %s - %s - %s. Be aware concurrent simulations will slow me down. Be gentle... I\'m delicate :^)' % (character, server, region))
221-
await client.send_message(message.channel, 'Temple Bot takes about 3-5 min to run a sim (longer if multiple sims are going at the same time). I will ping you when I\'m done')
222-
await client.send_message(message.channel, 'Current spec: %s. Armory info last updated %s' % (spec, armory_date(character, server, region)))
223-
await client.send_message(message.channel, '%s: Starting sim. This will take several minutes.' % author.mention)
224-
subprocess.Popen('python3 dps.py %s %s %s %s %s' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
225-
else:
226-
await client.send_message(message.channel, '%s: Sorry, I am a mean temple bot. I only have eyes for Shadow Priests.' % author.mention)
227-
else:
228-
if (role == 'TANK'):
229-
await client.send_message(message.channel, '%s: Sorry, sims for pawn do not work well for Tanks. This is a limitation of SimulationCraft. Have you thought about being Shadow? I like Shadow' % author.mention)
230-
elif (role == 'HEALING'):
231-
await client.send_message(message.channel, '%s: Sorry, sims do not work for healers. This is a limitation of SimulationCraft. Have you thought about being Shadow?' % author.mention)
232-
else:
233-
await client.send_message(message.channel, '%s: Error getting info for character %s-%s-%s. Role not found. Make sure your format is \'!sim charactername-servername-region\'.' % (author.mention, character, server, region))
234-
else:
235-
await client.send_message(message.channel, '%s: Character %s-%s-%s not found. Make sure your format is \'!sim charactername-servername-region\'.' % (author.mention, character, server, region))
236-
if message.content.startswith('!2sim ') or message.content.startswith('!3sim ') or message.content.startswith('!sim3 '):
178+
if message.content.startswith('!2sim ') or message.content.startswith('!3sim ') or message.content.startswith('!sim3 ') or message.content.startswith('!sim ') or message.content.startswith('!dps '):
237179
run2 = False
238180
run3 = False
239181
runAll3 = False
182+
runStandalone = False
183+
runDPS = False
240184

241185
if(message.content.startswith('!2sim ')):
242186
character = charstrip(message.content, '!2sim ').strip()
243187
run2 = True
244188
elif(message.content.startswith('!3sim ')):
245189
character = charstrip(message.content, '!3sim ').strip()
246190
run3 = True
247-
else:
191+
elif(message.content.startswith('!sim3 ')):
248192
character = charstrip(message.content, '!sim3 ').strip()
249193
runAll3 = True
194+
elif(message.content.startswith('!sim ')):
195+
character = charstrip(message.content, '!sim ').strip()
196+
runStandalone = True
197+
elif(message.content.startswith('!dps ')):
198+
character = charstrip(message.content, '!dps ').strip()
199+
runDPS = True
200+
250201
server = serverstrip(message.content).replace("'", "").strip()
251202
region = regionfind(message.content).strip()
252203
escapeAuthor = author.mention.replace(">", "\>").replace("<", "\<")
@@ -261,16 +212,32 @@ async def on_message(message):
261212
if (isDPS or spec == 'Shadow'):
262213
if(spec == 'Shadow' or True):
263214
await client.send_message(message.channel, 'Temple Bot takes about 3-5 min to run a sim (longer if multiple sims are going at the same time). I will ping you when I\'m done')
264-
await client.send_message(message.channel, 'Current spec: %s. Armory info last updated %s' % (spec, armory_date(character, server, region)))
215+
await client.send_message(message.channel, 'Current spec for %s-%s-%s: %s. Armory info last updated %s' % (character, server, region, spec, armory_date(character, server, region)))
265216
if(run2):
266-
await client.send_message(message.channel, '%s: Starting 1 sim for 2 targets. This will take several minutes.' % author.mention)
267-
subprocess.Popen('python3 sim2.py %s %s %s %s %s yes' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
217+
print('Starting a 2 target standalone')
218+
await client.send_message(message.channel, 'Starting 1 sim for 2 targets for %s - %s - %s. This will take several minutes.' % (character, server, region))
219+
subprocess.Popen('python3 sim.py %s %s %s %s %s 2 yes' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
268220
elif(run3):
269-
await client.send_message(message.channel, '%s: Starting 1 sim for 3 targets. This will take several minutes.' % author.mention)
270-
subprocess.Popen('python3 sim3.py %s %s %s %s %s yes' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
221+
print('Starting a 3 target standalone')
222+
await client.send_message(message.channel, 'Starting 1 sim for 3 targets for %s - %s - %s. This will take several minutes.' % (character, server, region))
223+
subprocess.Popen('python3 sim.py %s %s %s %s %s 3 yes' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
224+
elif(runAll3):
225+
print('Starting the 1,2,3 sim run')
226+
await client.send_message(message.channel, 'Starting 3 sims for 1, 2 and 3 targets for %s - %s - %s. These will run one after the other and will take several minutes.' % (character, server, region))
227+
subprocess.Popen('python3 sim.py %s %s %s %s %s 1 no' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
228+
elif(runStandalone):
229+
print('Starting a 1 target standalone')
230+
await client.send_message(message.channel, 'Starting sim. This will take several minutes for %s - %s - %s.' % (character, server, region))
231+
subprocess.Popen('python3 sim.py %s %s %s %s %s 1 yes' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
232+
elif(runDPS):
233+
print('Starting DPS only')
234+
await client.send_message(message.channel, 'Starting sim. This will take several minutes for %s - %s - %s.' % (character, server, region))
235+
subprocess.Popen('python3 dps.py %s %s %s %s %s' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
271236
else:
272-
await client.send_message(message.channel, '%s: Starting 3 sims for 1, 2 and 3 targets. These will run one after the other and will take several minutes.' % author.mention)
273-
subprocess.Popen('python3 sim1.py %s %s %s %s %s' % (character, server, message.channel.id, escapeAuthor, region), shell=True)
237+
#Failsafe is single sim
238+
print('I shouldn\'t be here, but gonna run a single target sim')
239+
await client.send_message(message.channel, 'Starting sim. This will take several minutes for %s - %s - %s.' % (character, server, region))
240+
subprocess.Popen('python3 sim.py %s %s %s %s %s 1 yes' % (character, server, message.channel. id, escapeAuthor, region), shell=True)
274241
else:
275242
await client.send_message(message.channel, '%s: Sorry, I am a mean temple bot. I only have eyes for Shadow Priests.' % author.mention)
276243
else:

sim.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,25 @@
1818
channel = str(sys.argv[3])
1919
author = str(sys.argv[4])
2020
region = str(sys.argv[5])
21+
numberTargets = str(sys.argv[6])
22+
escapeAuthor = str(sys.argv[4]).replace(">", "\>").replace("<", "\<")
23+
standAlone = str(sys.argv[7])
2124

22-
def pawnstrip(character, server, region):
25+
def pawnstrip(character, server, region, numberTargets, standAlone):
2326
try:
24-
with open('%s%s-%s-%s.html' % (simcraft_path, character, server, region), encoding='utf8') as infile:
27+
with open('%s%s-%s-%s-%s.html' % (simcraft_path, character, server, region, numberTargets), encoding='utf8') as infile:
2528
soup = BeautifulSoup(infile, "html.parser")
26-
return soup.find(text=re.compile(' Pawn: v1: '))
29+
if(numberTargets == '1' ):
30+
return soup.find(text=re.compile(' Pawn: v1: '))
31+
elif(numberTargets == '2' ):
32+
return soup.find(text=re.compile(' Pawn: v1: ')).replace(character, character + " 2 Target")
33+
elif(numberTargets == '3' ):
34+
return soup.find(text=re.compile(' Pawn: v1: ')).replace(character, character + " 3 Target")
35+
else:
36+
print("Something's not quite right. Default pawn print")
37+
return soup.find(text=re.compile(' Pawn: v1: '))
2738
except:
28-
print('Bad sim, cannot find %s%s-%s-%s.html' % (simcraft_path, character, server, region))
39+
print('Bad sim, cannot find %s%s-%s-%s-%s.html' % (simcraft_path, character, server, region, numberTargets))
2940
return 'Error simming character, simcraft crashed during sim. Please try again'
3041

3142

@@ -37,11 +48,19 @@ def mod_date(filename):
3748
async def on_ready():
3849
for x in config_json['servers']:
3950
client.accept_invite(x)
40-
await client.send_message(client.get_channel(channel), '%s: Stat weight simulation on %s completed. This is for a 1 target fight' % (author, character))
51+
await client.send_message(client.get_channel(channel), '%s: Stat weight simulation on %s completed. This is for a %a target fight' % (author, character, numberTargets))
4152
await client.send_message(client.get_channel(channel), '%s: Remember, this is for %s\'s current talents! Other talent combos will likely be a different pawn string.' % (author, character))
42-
await client.send_message(client.get_channel(channel), '%s: %s' % (author, pawnstrip(character, server, region)))
53+
await client.send_message(client.get_channel(channel), '%s: %s' % (author, pawnstrip(character, server, region, numberTargets, standAlone)))
54+
if(numberTargets == '1' and standAlone == "no"):
55+
await client.send_message(client.get_channel(channel), 'Starting 2 target sim')
56+
subprocess.Popen('python3 sim.py %s %s %s %s %s 2 no' % (character, server, channel, escapeAuthor, region), shell=True)
57+
elif(numberTargets == '2' and standAlone == "no"):
58+
await client.send_message(client.get_channel(channel), 'Starting 3 target sim')
59+
subprocess.Popen('python3 sim.py %s %s %s %s %s 3 no' % (character, server, channel, escapeAuthor, region), shell=True)
60+
elif(numberTargets == '3' and standAlone == "no"):
61+
await client.send_message(client.get_channel(channel), 'Does a 2 or 3 target look majorly off? Rerun a 2 target using !2sim character-server-region. Rerun a 3 with !3sim character-server-region')
4362
await client.logout()
4463
print('Starting sim:')
45-
print('%s./simc armory=%s,%s,%s calculate_scale_factors=1 scale_only=intellect,crit_rating,haste_rating,mastery_rating,versatility_rating iterations=10000 html=%s-%s-%s.html output=%s-%s.txt' % (simcraft_path, region, server, character, character, server, region, character, region))
46-
subprocess.call('%s./simc armory=%s,%s,%s calculate_scale_factors=1 scale_only=intellect,crit_rating,haste_rating,mastery_rating,versatility_rating iterations=10000 html=%s-%s-%s.html output=%s-%s.txt' % (simcraft_path, region, server, character, character, server, region, character, region), cwd=simcraft_path, shell=True)
64+
print('%s./simc armory=%s,%s,%s calculate_scale_factors=1 scale_only=intellect,crit_rating,haste_rating,mastery_rating,versatility_rating iterations=10000 desired_targets=%s html=%s-%s-%s-%s.html output=%s-%s-%s.txt' % (simcraft_path, region, server, character, numberTargets, character, server, region, numberTargets, character, region, numberTargets))
65+
subprocess.call('%s./simc armory=%s,%s,%s calculate_scale_factors=1 scale_only=intellect,crit_rating,haste_rating,mastery_rating,versatility_rating iterations=10000 desired_targets=%s html=%s-%s-%s-%s.html output=%s-%s-%s.txt' % (simcraft_path, region, server, character, numberTargets, character, server, region, numberTargets, character, region, numberTargets), cwd=simcraft_path, shell=True)
4766
client.run(token)

0 commit comments

Comments
 (0)