当前位置: 首页 > 知识库问答 >
问题:

discord.py向成员发送加入信息并赋予他们角色

阎善
2023-03-14

我想让我的机器人直接向加入我的服务器的人发送消息,并在30秒后给他们角色。我没有收到任何错误,我的机器人没有崩溃,但它什么也不做。

我的代码:

@bot.event
async def on_member_join(member):
    await member.send('Hi! Welcome to our server, in 30 seconds you will get "Verified" role, please read rules in that time.')
    time.sleep(30)
    await member.add_roles('Verified')

我已经导入了不和谐时间,我的机器人有权限,成员没有阻止DMs。

共有2个答案

吴均
2023-03-14

要获取成员加入事件,您的bot需要成员意图,默认情况下禁用该意图。要获得它,你必须做两件事:

转到开发人员门户并在bot==下

在你的机器人中启用它,比如:

intents = discord.Intents.default()
intents.members = True

bot = commands.Bot(intents=intents, ...) # command_prefix and other things like that in the ...
唐腾
2023-03-14

如果您正在使用最新版本的discord.py,这应该可以:

@bot.event   #Event to detect when a user joins the server
async def on_member_join(member):
    await member.send('Hi! Welcome to our server, in 30 seconds you will get "Verified" role, please read rules in that time.')
    time.sleep(30)   #The parameter is in seconds, so it'll wait for 30 seconds
    verifiedRole = discord.utils.get(member.guild.roles, id = THE_ROLE_ID)
    await member.add_roles(verifiedRole)

注意:请记住,机器人将在这30秒内停止工作。所以使用时间。sleep()这个主意太糟糕了。使用asyncio。sleep()

@bot.event   #Event to detect when a user joins the server
async def on_member_join(member):
    await member.send('Hi! Welcome to our server, in 30 seconds you will get "Verified" role, please read rules in that time.')
    await asyncio.sleep(30)   #The parameter is in seconds, so it'll wait for 30 seconds
    verifiedRole = discord.utils.get(member.guild.roles, id = THE_ROLE_ID)
    await member.add_roles(verifiedRole)

通过使用这个,机器人在这30秒内仍然可以工作。记住导入asyncio而不是time

服务器中的角色ID替换THE_ROLE_ID,您可以通过右键单击角色获得该角色,如下所示。

 类似资料:
  • Bot只是不工作:/Bot没有给出任何错误

  • 我在discord.py做了一个机器人,希望我的机器人在网络钩子在特定频道发送消息时定位一个角色。有办法这么做吗?现在所有我有的是通道ID和我很确定这是一个客户端事件

  • 基本上,这段代码检查它是否是一个指定的时间,如果是,它会发送一条带有意大利新冠病毒数据的消息,但它不起作用,也不会返回任何我尝试过的东西,甚至添加了一个错误处理程序(回溯),也没有做任何事情。我唯一的输出是来自_ready()上的异步def 所以我试了一下: 但是我没有得到任何输出,如果我添加@client。在async def covid之前的command()它给了我这个错误:回溯(最后一次调

  • 我试图制作一个命令,显示提及用户的角色。这个命令是一个测试命令,我将在mute命令中实现它。(命令将删除成员的当前角色并添加静音角色) 这就是我所拥有的: 希望有人能帮我。 谢了!

  • 我目前正在制作一个discord bot,并希望在服务器加入时在服务器的通道中发送一条消息,这是我到目前为止的代码。 当我运行这段代码时,什么都不会发生。我没有得到任何ERORR或输出。 如果有人能帮忙,那就太棒了。谢谢

  • 每当有人将机器人添加到公会时,它都会向系统通道发送一个带有一点信息的嵌入。 我希望它向邀请机器人的人(使用oauth授权链接的帐户)发送一个相同的消息。问题是,事件只接受1个参数,它没有提供有关使用授权链接将bot添加到guild的人员的任何信息。 有办法做到这一点吗?我是否必须使用“欺骗”方法,比如有一个自定义网站来记录使用邀请的帐户?