forked from viveksantayana/geas-bot
Fully implemented /tcard command.
Bug fixes for member signup Added live update of game header message during pitches Documentation updates
This commit is contained in:
@ -66,13 +66,14 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
if set([x.id for x in ctx.author.roles]) & set(pitches[guildStr][timeslot]['roles'].values()):
|
||||
for r in list(set([x.id for x in ctx.author.roles]) & set(pitches[guildStr][timeslot]['roles'].values())):
|
||||
role = ctx.guild.get_role(r)
|
||||
rStr = str(role.id)
|
||||
if role.id != pitches[guildStr][timeslot]['roles'][index]:
|
||||
await ctx.author.remove_roles(role,reason=f'/pitch interaction by {ctx.author.display_name}')
|
||||
i = pitches[guildStr][timeslot]['indices'][role.id]
|
||||
element = pitches[guildStr][timeslot]['entries'][i]
|
||||
gm = await self.client.fetch_user(element['gm'])
|
||||
if ctx.author.id != lookup[guildStr][str(role.id)]['gm']:
|
||||
data[guildStr][timeslot][str(role.id)]['current_players'] -= 1
|
||||
if ctx.author.id != lookup[guildStr][rStr]['gm']:
|
||||
data[guildStr][timeslot][rStr]['current_players'] -= 1
|
||||
element['current_players'] -= 1
|
||||
o = f'_ _\n***{element["game_title"]}*** (GM: {gm.mention})\n```\n'
|
||||
if element['system'] is not None: o = ''.join([o,f'System: {element["system"]}\n'])
|
||||
@ -84,9 +85,9 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
o = ''.join([o,f'~~Spaces Remaining: {str(0)}~~'])if spaces_remaining <= 0 else ''.join([o,f'Spaces Remaining: {str(spaces_remaining)}'])
|
||||
m = await ctx.channel.fetch_message(pitches[guildStr][timeslot]['messages'][i])
|
||||
await m.edit(content=o)
|
||||
tc = discord.utils.find(lambda x: x.id == lookup[guildStr][str(role.id)]['text_channel'],ctx.guild.text_channels)
|
||||
tc = discord.utils.find(lambda x: x.id == lookup[guildStr][rStr]['text_channel'],ctx.guild.text_channels)
|
||||
if tc is None:
|
||||
c = discord.utils.find(lambda x: x.id == lookup[guildStr][str(role.id)]['category'],ctx.guild.categories)
|
||||
c = discord.utils.find(lambda x: x.id == lookup[guildStr][rStr]['category'],ctx.guild.categories)
|
||||
if c is not None:
|
||||
tPos = len(ctx.guild.channels)
|
||||
for t in c.text_channels:
|
||||
@ -96,13 +97,15 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
if tc is not None:
|
||||
await tc.send(f'```{ctx.author.display_name} has left the game.```')
|
||||
role = ctx.guild.get_role(pitches[guildStr][timeslot]['roles'][index])
|
||||
rStr = str(role.id)
|
||||
if role in ctx.author.roles:
|
||||
await ctx.send(f'```Error: You are already in the game `{lookup[guildStr][str(role.id)]["game_title"]}`.```', hidden=True)
|
||||
await ctx.send(f'```Error: You are already in the game `{lookup[guildStr][rStr]["game_title"]}`.```', hidden=True)
|
||||
else:
|
||||
await ctx.author.add_roles(role,reason=f'/pitch interaction by {ctx.author.display_name}')
|
||||
element = pitches[guildStr][timeslot]['entries'][index]
|
||||
data[guildStr][timeslot][str(role.id)]['current_players'] += 1
|
||||
element['current_players'] += 1
|
||||
if ctx.author.id != lookup[guildStr][rStr]['gm']:
|
||||
data[guildStr][timeslot][rStr]['current_players'] += 1
|
||||
element['current_players'] += 1
|
||||
gm = await self.client.fetch_user(element['gm'])
|
||||
o = f'_ _\n***{element["game_title"]}*** (GM: {gm.mention})\n```\n'
|
||||
if element['system'] is not None: o = ''.join([o,f'System: {element["system"]}\n'])
|
||||
@ -114,10 +117,10 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
o = ''.join([o,f'~~Spaces Remaining: {str(0)}~~'])if spaces_remaining <= 0 else ''.join([o,f'Spaces Remaining: {str(spaces_remaining)}'])
|
||||
m = await ctx.channel.fetch_message(pitches[guildStr][timeslot]['messages'][index])
|
||||
await m.edit(content=o)
|
||||
await ctx.send(f'You have joined the game `{lookup[guildStr][str(role.id)]["game_title"]}`.',hidden=True)
|
||||
tc = discord.utils.find(lambda x: x.id == lookup[guildStr][str(role.id)]['text_channel'],ctx.guild.text_channels)
|
||||
await ctx.send(f'You have joined the game `{lookup[guildStr][rStr]["game_title"]}`.',hidden=True)
|
||||
tc = discord.utils.find(lambda x: x.id == lookup[guildStr][rStr]['text_channel'],ctx.guild.text_channels)
|
||||
if tc is None:
|
||||
c = discord.utils.find(lambda x: x.id == lookup[guildStr][str(role.id)]['category'],ctx.guild.categories)
|
||||
c = discord.utils.find(lambda x: x.id == lookup[guildStr][rStr]['category'],ctx.guild.categories)
|
||||
if c is not None:
|
||||
tPos = len(ctx.guild.channels)
|
||||
for t in c.text_channels:
|
||||
@ -126,15 +129,27 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
tPos = t.position
|
||||
if tc is not None:
|
||||
await tc.send(f'```{ctx.author.display_name} has joined the game.```')
|
||||
ts = lookup[guildStr][rStr]['time']
|
||||
p = await tc.pins()
|
||||
if p is not None:
|
||||
header = discord.utils.find(lambda x: x.id == data[guildStr][ts][rStr]['header_message'], p)
|
||||
if header is not None:
|
||||
text = header.content.split('\n')
|
||||
for line, item in enumerate(text):
|
||||
if 'Current Players: ' in item:
|
||||
text[line] = f'Current Players: {str(data[guildStr][ts][rStr]["current_players"]) if data[guildStr][ts][rStr]["current_players"] is not None else str(0)}'
|
||||
break
|
||||
await header.edit(content='\n'.join(text))
|
||||
elif ctx.custom_id.startswith('leave_'):
|
||||
role = ctx.guild.get_role(pitches[guildStr][timeslot]['roles'][index])
|
||||
rStr = str(role.id)
|
||||
if role not in ctx.author.roles:
|
||||
await ctx.send(f'```Error: You are not in the game `{lookup[guildStr][str(role.id)]["game_title"]}`.```', hidden=True)
|
||||
await ctx.send(f'```Error: You are not in the game `{lookup[guildStr][rStr]["game_title"]}`.```', hidden=True)
|
||||
else:
|
||||
await ctx.author.remove_roles(role,reason=f'/pitch interaction by {ctx.author.display_name}')
|
||||
element = pitches[guildStr][timeslot]['entries'][index]
|
||||
if ctx.author.id != lookup[guildStr][str(role.id)]['gm']:
|
||||
data[guildStr][timeslot][str(role.id)]['current_players'] -= 1
|
||||
if ctx.author.id != lookup[guildStr][rStr]['gm']:
|
||||
data[guildStr][timeslot][rStr]['current_players'] -= 1
|
||||
element['current_players'] -= 1
|
||||
gm = await self.client.fetch_user(element['gm'])
|
||||
o = f'_ _\n***{element["game_title"]}*** (GM: {gm.mention})\n```\n'
|
||||
@ -147,10 +162,10 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
o = ''.join([o,f'~~Spaces Remaining: {str(0)}~~'])if spaces_remaining <= 0 else ''.join([o,f'Spaces Remaining: {str(spaces_remaining)}'])
|
||||
me = await ctx.channel.fetch_message(pitches[guildStr][timeslot]['messages'][index])
|
||||
await me.edit(content=o)
|
||||
await ctx.send(f'You have left the game `{lookup[guildStr][str(role.id)]["game_title"]}`.',hidden=True)
|
||||
tc = discord.utils.find(lambda x: x.id == lookup[guildStr][str(role.id)]['text_channel'],ctx.guild.text_channels)
|
||||
await ctx.send(f'You have left the game `{lookup[guildStr][rStr]["game_title"]}`.',hidden=True)
|
||||
tc = discord.utils.find(lambda x: x.id == lookup[guildStr][rStr]['text_channel'],ctx.guild.text_channels)
|
||||
if tc is None:
|
||||
c = discord.utils.find(lambda x: x.id == lookup[guildStr][str(role.id)]['category'],ctx.guild.categories)
|
||||
c = discord.utils.find(lambda x: x.id == lookup[guildStr][rStr]['category'],ctx.guild.categories)
|
||||
if c is not None:
|
||||
tPos = len(ctx.guild.channels)
|
||||
for t in c.text_channels:
|
||||
@ -159,6 +174,17 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
|
||||
tPos = t.position
|
||||
if tc is not None:
|
||||
await tc.send(f'```{ctx.author.display_name} has left the game.```')
|
||||
ts = lookup[guildStr][rStr]['time']
|
||||
p = await tc.pins()
|
||||
if p is not None:
|
||||
header = discord.utils.find(lambda x: x.id == data[guildStr][ts][rStr]['header_message'], p)
|
||||
if header is not None:
|
||||
text = header.content.split('\n')
|
||||
for line, item in enumerate(text):
|
||||
if 'Current Players: ' in item:
|
||||
text[line] = f'Current Players: {str(data[guildStr][ts][rStr]["current_players"]) if data[guildStr][ts][rStr]["current_players"] is not None else str(0)}'
|
||||
break
|
||||
await header.edit(content='\n'.join(text))
|
||||
yaml_dump(data, dataFile)
|
||||
yaml_dump(pitches, pitchesFile)
|
||||
|
||||
|
Reference in New Issue
Block a user