从分隔的用户列表中删除特定角色 (Discord/Python)

Remove specific roles from delimited list of users (Discord/Python)

我正在尝试制作一个小机器人,它将从我指定的用户列表中删除特定角色。我有我需要从中删除角色的用户的所有 ID 和用户名,但我不知道如何对其进行编码以允许将长分隔列表作为变量。我的预期用途是

-strip (userid1,userid2,userid3)

...能够生成动态列表,其中包含的成员数量会有所不同。

这是我的更多上下文用例 - 我有一个 Patreon,它向我的 Discord 授予角色。但是,Patreon 只能赋予角色,不能移除角色。我制作了一个 scraper,可以将顾客列表与不和谐成员列表及其角色进行比较。它过滤掉仍然具有 Discord 角色的已取消顾客列表。我希望能够将该列表弹出到机器人命令中并让它擦除角色。

下面的脚本目前允许我删除单个用户的特定角色。它工作正常,但需要一种方法来允许用户列表而不是单个用户。

提前致谢!

import os
from discord.ext import commands
from discord.utils import get
import discord

client = commands.Bot(command_prefix = '-', help_command=None)

@client.event
async def on_ready():
  print(f'{client.user} has awakened!')
    
@client.command()
async def swipe(ctx, user: discord.Member):
    role_names = ("role1", "role2", "role3")
    roles = tuple(get(ctx.guild.roles, name=n) for n in role_names)
    await user.remove_roles(*roles)
    await ctx.send(f'Removed **all** Patreon roles from {user.mention}.')

my_secret = os.environ['TOKEN']
client.run(my_secret)

您可以这样做:

import os
from discord.ext import commands
from discord.utils import get
import discord

client = commands.Bot(command_prefix = '-', help_command=None)

@client.event
async def on_ready():
  print(f'{client.user} has awakened!')
    
async def helper(ctx, user_id):
    role_names = ("role1", "role2", "role3")
    roles = tuple(get(ctx.guild.roles, name=n) for n in role_names)
    user = await ctx.guild.fetch_member(int(user_id)) #notice the additional line here
    await user.remove_roles(*roles)
    await ctx.send(f'Removed **all** Patreon roles from {user.mention}.')

@client.command()
async def swipe(ctx, *args):
    for user in args:
        await helper(ctx, int(user))


my_secret = os.environ['TOKEN']
client.run(my_secret)

现在 swipe 接受如下参数:-swipe user1 user2 user3 并为每个用户调用您的原始函数(现在称为 helper)。