Created
March 29, 2022 20:30
-
-
Save nonchris/4ab2aa168e79775d1c2a4cbeed715d5d to your computer and use it in GitHub Desktop.
A quick d.py fix if your reaction role bot f*cked up
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import discord | |
from discord.ext import commands | |
intents = discord.Intents.all() | |
bot = commands.Bot(command_prefix="!", intents=intents) | |
@bot.event | |
async def on_ready(): | |
"""! | |
function called when the bot is ready. Emits the '[Bot] has connected' message | |
""" | |
print() | |
member_count = 0 | |
guild_string = "" | |
for g in bot.guilds: | |
guild_string += f"{g.name} - {g.id} - Members: {g.member_count}\n" | |
member_count += g.member_count | |
print(f"Bot '{bot.user.name}' has connected, active on {len(bot.guilds)} guilds:\n{guild_string}") | |
# map emote sting to role ID | |
roles = { | |
"๐": 957323389163425873, | |
"๐": 957323915628265472, | |
"๐ค": 957323971349585980, | |
"๐ฅ๏ธ": 957323983630528574, | |
"๐งฎ": 957324766086320128, | |
"๐ฒ": 957324106016120842, | |
"๐ช": 957324848403742750, | |
"๐งโ๐ป": 957324101834407986, | |
"๐งโ๐ฌ": 957324096830574612, | |
"๐": 957324104770416751, | |
"๐": 957324562637406260, | |
"๐ก": 957324564201889863, | |
"๐ง ": 957324104367743026, | |
"๐": 958317022767353856, | |
"๐": 958320007752847421, | |
"๐บ๏ธ": 958320363723448320, | |
"๐": 958318738971717652, | |
"๐": 957324766379913227, | |
"๐๏ธ": 957324564868776056, | |
"๐๏ธ": 958318186015621161, | |
"โ": 958317755243855902, | |
"๐จ": 957324106641055764, | |
"๐งโ๐ซ": 958419063724441620, | |
} | |
async def merge(message: discord.Message): | |
""" | |
:param message: The message to walk the reactions for | |
""" | |
to_add: set[discord.member] = set() | |
to_remove: set[discord.member] = set() | |
for reaction in message.reactions: | |
print(roles[reaction.emoji]) | |
role: discord.Role = message.guild.get_role(roles[reaction.emoji]) | |
print(f"ROLE: {role.name}") | |
# get set of people who reacted and those who have the role | |
reactors = set(await reaction.users().flatten()) | |
member_set = set(role.members) | |
# get the members that are in the correct state (have role and do want the role) | |
correct_members = member_set.intersection(reactors) | |
# members who have the role bot don't have reacted | |
to_remove = member_set.difference(correct_members) | |
# members who reacted but don't have the role | |
to_add = reactors.difference(correct_members) | |
# print(f"{role.name} to add: {to_add}, to remove: {to_remove}") | |
# make corrections | |
for member in to_add: | |
print("Add") | |
await member.add_roles(role) | |
print(f"{member.name};{member.id}") | |
for member in to_remove: | |
print("Remove") | |
await member.remove_roles(role) | |
print(f"{member.name};{member.id}") | |
# dispatch the process | |
@commands.has_permissions(administrator=True) | |
@bot.command(name="correct", aliases=["c"]) | |
async def fetch_message(ctx: commands.Context): | |
# get channel and messages | |
channel: discord.TextChannel = ctx.guild.get_channel(957322759015378944) | |
message1: discord.Message = await channel.fetch_message(958338416045588560) | |
message2: discord.Message = await channel.fetch_message(958338417270325248) | |
# let's go | |
await merge(message1) | |
await merge(message2) | |
bot.run("") # YOUR TOKEN HERE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment