Skip to content

Commit a6315a0

Browse files
author
Paul Philion
committed
Adding role sync and better team display
1 parent 3e8bce0 commit a6315a0

File tree

4 files changed

+48
-26
lines changed

4 files changed

+48
-26
lines changed

netbot/cog_scn.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,12 +308,11 @@ async def teams(self, ctx:discord.ApplicationContext, teamname:str=None):
308308
await ctx.respond(f"Unknown team name: {teamname}\nTeams: {all_teams}") # error
309309
else:
310310
# all teams
311-
#teams = self.redmine.user_mgr.cache.get_teams()
312-
teams = "\n- ".join([team.name for team in ctx.guild.roles])
313-
#buff = ""
314-
#for team in teams:
315-
# buff += self.formatter.format_team(team)
316-
await ctx.respond("Available teams:\n-" + teams)
311+
#teams = "\n- ".join([team.name for team in ctx.guild.roles])
312+
buff = ""
313+
for team in ctx.guild.roles:
314+
buff += self.formatter.format_team(ctx, team)
315+
await ctx.respond(buff)
317316

318317

319318
#@scn.command()

netbot/formatting.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,6 @@ def help_embed(self, _: discord.ApplicationContext) -> discord.Embed:
521521

522522
return embed
523523

524-
## FIXME move to DiscordFormatter
525524

526525
async def print_team(self, ctx, team):
527526
msg = f"> **{team.name}**\n"
@@ -536,7 +535,7 @@ async def print_team(self, ctx, team):
536535

537536
def format_team(self, ctx: discord.ApplicationContext, team: discord.Role) -> str:
538537
# single line format: teamname: member1, member2
539-
skip_teams = ["blocked", "users"]
538+
skip_teams = ["blocked", "users", "@everyone", ctx.me.name]
540539

541540
if team and team.name not in skip_teams:
542541
team_channel = ctx.bot.channel_for_team(team.name)
@@ -551,6 +550,6 @@ def format_team(self, ctx: discord.ApplicationContext, team: discord.Role) -> st
551550
else:
552551
team_name = "**" + team.name + "**"
553552

554-
return f"{team_name}: {', '.join([user.name for user in team.members])}\n"
553+
return f"{team_name}: {', '.join([user.display_name for user in team.members])}\n"
555554
else:
556555
return ""

netbot/netbot.py

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,46 @@ def run_bot(self):
102102
super().run(os.getenv('DISCORD_TOKEN'))
103103

104104

105-
def cache_roles(self):
105+
# def cache_roles(self):
106+
# # Noting: "guild" maps to discord server, and the API is designed to run on many "Discord servers" concurrently
107+
# for guild in self.guilds:
108+
# for member in guild.members:
109+
# for role in member.roles:
110+
# user = self.redmine.user_mgr.find_discord_user(member.name)
111+
# #log.debug(f"<<< {role.name} {user.name}")
112+
# if user:
113+
# self.teams.add_user(role.name, user.name, user.id)
114+
# else:
115+
# log.warning(f"Unknown user: {member.name} for team: {role.name}")
116+
117+
# log.debug(f"Loaded teams: {self.teams}")
118+
119+
def sync_team(self, role:discord.Role, team:Team):
120+
team_ids = set()
121+
for member in role.members:
122+
user = self.redmine.user_mgr.find_discord_user(member.name)
123+
log.debug(f"adding {user.name} to {team.name}")
124+
self.redmine.user_mgr.join_team(user, team.name)
125+
team_ids.add(user.id)
126+
# noting: "in_team_ids" is the set of valid redmine IDs that should be in the associated team
127+
for user in team.users:
128+
if user.id not in team_ids:
129+
# user missing from ids, must have been removed
130+
log.debug(f"removing {user.name} from {team.name}")
131+
self.redmine.user_mgr.leave_team(user, team.name)
132+
133+
134+
def sync_roles(self):
106135
# Noting: "guild" maps to discord server, and the API is designed to run on many "Discord servers" concurrently
107136
for guild in self.guilds:
108-
for member in guild.members:
109-
for role in member.roles:
110-
user = self.redmine.user_mgr.find_discord_user(member.name)
111-
#log.debug(f"<<< {role.name} {user.name}")
112-
if user:
113-
self.teams.add_user(role.name, user.name, user.id)
114-
else:
115-
log.warning(f"Unknown user: {member.name} for team: {role.name}")
116-
117-
log.debug(f"Loaded teams: {self.teams}")
137+
for role in guild.roles:
138+
team = self.redmine.user_mgr.get_team_by_name(role.name)
139+
if not team:
140+
log.warning(f"No team for {role.name}. Create it, please!") # FIXME create the team!
141+
# create_team -> POST to /groups.json?name=teamname
142+
else:
143+
self.sync_team(role, team)
144+
# TODO: On team sync, update loacl team cache
118145

119146

120147
def get_all_teams(self, include_users: bool = True) -> dict[str, Team]:
@@ -123,7 +150,7 @@ def get_all_teams(self, include_users: bool = True) -> dict[str, Team]:
123150

124151
def reindex(self):
125152
log.debug("NetBot.reindex")
126-
self.cache_roles()
153+
self.sync_roles()
127154

128155

129156
async def on_ready(self):

redmine/users.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -463,11 +463,8 @@ def leave_team(self, user: User, teamname:str):
463463
return
464464

465465
# DELETE to /groups/{team-id}/users/{user_id}.json
466-
r = self.session.delete(f"/groups/{team.id}/users/{user.id}.json") # encapsulation
467-
468-
# check status
469-
if not r:
470-
log.warning(f"Error removing {user.login} from {teamname}")
466+
self.session.delete(f"/groups/{team.id}/users/{user.id}.json") # encapsulation
467+
# raises an exception if there's a problem
471468

472469

473470
# python method sync?

0 commit comments

Comments
 (0)