mirror of
https://github.com/TinyTapeout/tt-support-tools.git
synced 2026-11-03 12:46:08 +01:00
102 lines
3.2 KiB
Python
Executable File
102 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
|
|
import discord
|
|
import yaml
|
|
|
|
TOKEN = os.environ["DISCORD_TOKEN"]
|
|
TARG = os.environ["TARGET_SERVER"]
|
|
ROLE_ID = os.environ["ROLE_ID"]
|
|
|
|
intents = discord.Intents.default()
|
|
intents.members = True
|
|
|
|
client = discord.Client(intents=intents)
|
|
exit_code = 0
|
|
|
|
|
|
@client.event
|
|
async def on_ready():
|
|
global exit_code
|
|
try:
|
|
print(f"{client.user} has connected to Discord!")
|
|
server = None
|
|
for g in client.guilds:
|
|
if g.name == TARG:
|
|
server = g
|
|
break
|
|
if server is None:
|
|
print(f"Error: Bot is not in a server named {TARG}")
|
|
exit_code = 1
|
|
await client.close()
|
|
|
|
role = server.get_role(int(ROLE_ID))
|
|
if not role:
|
|
print("Error: requested role does not exist on server!")
|
|
exit_code = 1
|
|
await client.close()
|
|
|
|
participants = []
|
|
for project in os.listdir("./projects"):
|
|
info_file = os.path.join("projects", project, "info.yaml")
|
|
if not os.path.exists(info_file):
|
|
print(f"info.yaml does not exist for project {project}. Skipping.")
|
|
else:
|
|
try:
|
|
stream = open(info_file, "r")
|
|
data = yaml.load(stream, Loader=yaml.FullLoader)
|
|
stream.close()
|
|
if "discord" in data["documentation"]:
|
|
dname = data["documentation"]["discord"]
|
|
if len(dname):
|
|
if "#" in dname:
|
|
dname = dname.split("#")[0]
|
|
# print(f'adding {dname}')
|
|
participants.append(dname)
|
|
else:
|
|
print(
|
|
f"Project {project} has no discord username listed. Skipping."
|
|
)
|
|
except Exception as ex:
|
|
print(f"Error parsing info.yaml for project {project}. Skipping.")
|
|
print(f"Error was: {ex}")
|
|
|
|
members = []
|
|
for p in participants:
|
|
for m in server.members:
|
|
if m.name == p:
|
|
members.append(m)
|
|
break
|
|
if m.global_name == p:
|
|
members.append(m)
|
|
break
|
|
else:
|
|
print(f"{p} not found in members")
|
|
|
|
new_role_members = []
|
|
for m in members:
|
|
if len([d for d in m.roles if d.id == role.id]) == 0:
|
|
print(f"Giving the role to {m.name}")
|
|
new_role_members.append(m.name)
|
|
await m.add_roles(
|
|
role, reason="Automatic role assignment by GitHub actions pipeline."
|
|
)
|
|
else:
|
|
print(f"{m.name} already has role")
|
|
|
|
print("All done!")
|
|
print("gave new role to:")
|
|
print("@" + " @".join(new_role_members))
|
|
await client.close()
|
|
except Exception as ex:
|
|
print("Exception was thrown!")
|
|
print(ex)
|
|
exit_code = 1
|
|
await client.close()
|
|
|
|
|
|
client.run(TOKEN)
|
|
sys.exit(exit_code)
|