从分隔的用户列表中删除特定角色 (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
)。
我正在尝试制作一个小机器人,它将从我指定的用户列表中删除特定角色。我有我需要从中删除角色的用户的所有 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
)。