generated from nhcarrigan/template
4fdb5d06f1
- Port 19 cohort scripts from /home/naomi/docs/cohort/ - Replace all hardcoded tokens and dotenv usage with os.environ - Add pandas==3.0.1 dependency - Add E501 to ruff ignore list for Discord message string content - Make remove_resigned_members.py reusable (empty RESIGNED_IDS constant) - Make update_roster_messages.py reusable (iterates all teams from JSON) - Exclude 12 one-off/event-specific scripts as non-reusable
122 lines
3.8 KiB
Python
122 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Fix permissions for cohort-team-michael-and-yoon channel.
|
|
|
|
Deny Send Messages in Threads for @everyone and @cohort.
|
|
"""
|
|
|
|
import asyncio
|
|
import os
|
|
|
|
import aiohttp
|
|
|
|
DISCORD_BOT_TOKEN = os.environ["DISCORD_BOT_TOKEN"]
|
|
BASE_URL = "https://discord.com/api/v10"
|
|
GUILD_ID = "739845668582981683"
|
|
CHANNEL_ID = "1467964405646885237"
|
|
|
|
SEND_MESSAGES = 0x0000000000000800
|
|
SEND_MESSAGES_IN_THREADS = 0x0000004000000000
|
|
|
|
EVERYONE_ROLE_ID = GUILD_ID
|
|
COHORT_ROLE_ID = "1390925253102010521"
|
|
|
|
|
|
async def fix_permissions() -> None:
|
|
"""Fix the channel permissions."""
|
|
headers = {
|
|
"Authorization": f"Bot {DISCORD_BOT_TOKEN}",
|
|
"Content-Type": "application/json",
|
|
}
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
print("Fetching current channel permissions...")
|
|
async with session.get(
|
|
f"{BASE_URL}/channels/{CHANNEL_ID}", headers=headers
|
|
) as resp:
|
|
if resp.status != 200:
|
|
error = await resp.text()
|
|
print(f"Error fetching channel: {resp.status} - {error}")
|
|
return
|
|
|
|
channel = await resp.json()
|
|
print(f"Channel: {channel['name']}")
|
|
|
|
permission_overwrites = channel.get("permission_overwrites", [])
|
|
|
|
everyone_overwrite = None
|
|
cohort_overwrite = None
|
|
|
|
for overwrite in permission_overwrites:
|
|
if overwrite["id"] == EVERYONE_ROLE_ID:
|
|
everyone_overwrite = overwrite
|
|
elif overwrite["id"] == COHORT_ROLE_ID:
|
|
cohort_overwrite = overwrite
|
|
|
|
print("\nFixing @everyone permissions...")
|
|
if everyone_overwrite:
|
|
current_deny = int(everyone_overwrite.get("deny", "0"))
|
|
current_allow = int(everyone_overwrite.get("allow", "0"))
|
|
|
|
new_deny = current_deny | SEND_MESSAGES | SEND_MESSAGES_IN_THREADS
|
|
new_allow = current_allow & ~SEND_MESSAGES & ~SEND_MESSAGES_IN_THREADS
|
|
|
|
payload = {
|
|
"type": 0,
|
|
"deny": str(new_deny),
|
|
"allow": str(new_allow),
|
|
}
|
|
else:
|
|
payload = {
|
|
"type": 0,
|
|
"deny": str(SEND_MESSAGES | SEND_MESSAGES_IN_THREADS),
|
|
"allow": "0",
|
|
}
|
|
|
|
async with session.put(
|
|
f"{BASE_URL}/channels/{CHANNEL_ID}/permissions/{EVERYONE_ROLE_ID}",
|
|
headers=headers,
|
|
json=payload,
|
|
) as resp:
|
|
if resp.status == 204:
|
|
print("✅ @everyone permissions fixed!")
|
|
else:
|
|
error = await resp.text()
|
|
print(f"❌ Error fixing @everyone: {resp.status} - {error}")
|
|
|
|
print("\nFixing @cohort permissions...")
|
|
if cohort_overwrite:
|
|
current_deny = int(cohort_overwrite.get("deny", "0"))
|
|
current_allow = int(cohort_overwrite.get("allow", "0"))
|
|
|
|
new_deny = current_deny | SEND_MESSAGES | SEND_MESSAGES_IN_THREADS
|
|
new_allow = current_allow & ~SEND_MESSAGES & ~SEND_MESSAGES_IN_THREADS
|
|
|
|
payload = {
|
|
"type": 0,
|
|
"deny": str(new_deny),
|
|
"allow": str(new_allow),
|
|
}
|
|
else:
|
|
payload = {
|
|
"type": 0,
|
|
"deny": str(SEND_MESSAGES | SEND_MESSAGES_IN_THREADS),
|
|
"allow": "0",
|
|
}
|
|
|
|
async with session.put(
|
|
f"{BASE_URL}/channels/{CHANNEL_ID}/permissions/{COHORT_ROLE_ID}",
|
|
headers=headers,
|
|
json=payload,
|
|
) as resp:
|
|
if resp.status == 204:
|
|
print("✅ @cohort permissions fixed!")
|
|
else:
|
|
error = await resp.text()
|
|
print(f"❌ Error fixing @cohort: {resp.status} - {error}")
|
|
|
|
print("\n✨ Done! Permissions have been fixed.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(fix_permissions())
|