加入某人时创建规则协议

时间:2018-08-16 17:11:20

标签: python discord discord.py

我想要一个将新成员设置为只能查看一个频道并且必须同意规则才能使用服务器的机器人。我已经写了这样做,但我一直收到此错误。

Ignoring exception in on_member_join
Traceback (most recent call last):
  File "C:\Users\ezter\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 307, in _run_event
    yield from getattr(self, event)(*args, **kwargs)
  File "D:\programing\Discord Bots\Osis Nation\Start.py", line 31, in on_member_join
    role = discord.utils.get(bot.roles, name="Default")
  File "C:\Users\ezter\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 296, in __getattr__
    raise AttributeError(msg.format(self.__class__, name))
AttributeError: '<class 'discord.ext.commands.bot.Bot'>' object has no attribute 'roles'

我用这段代码来完成

#Welcomer
@bot.event
async def on_member_join(member):
    print("A member just joined and his name is" + member.name)
    mid = member.id
    role = discord.utils.get(bot.roles, name="Default")
    role3 = discord.utils.get(member.server.roles, id="<479670838648635392>")
    role2 = discord.utils.get(member.server.roles, id="<479692108953944081>")
    await bot.add_roles(member, bot.get_)

    Rules = "1. Do not DM the Owner or any other staff unless they have DMed you first! \n 2. Be kind, \n 3. Use common sense, \n 4. No swearing, \n 5. No racism or bullying, \n 6. No advertising, \n 7. Do not chat in #music Text or Voice channels, \n 8. Do not spam #applications if your application is accepted or denied! This is only to be used for submitting and staff members replying to the application. \n 9. Do not use or abuse bot commands you should not be using! \n 10. Do not @ any staff members unless it is an emergency.  "

    await bot.send_message(bot.get_channel('479685091749134346'), 'Hello <@%s>, Welcome to Osis Nation, please read all the rules carefully' % (mid))
    await bot.send_message(bot.get_channel('479685091749134346'), (Rules))
    await bot.send_message(bot.get_channel('479685091749134346'), 'If you agree write !Agree. If you do not agree write !Decline')

    if member.content.upper().startwith("!Agree"):
        await bot.send_message(bot.get_channel('479685091749134346'), 'You will be redirected to the server in 5 seconds')
        time.sleep(5)

        await bot.remove_roles(member, role)

2 个答案:

答案 0 :(得分:2)

我是使用此代码完成的

    #Welcomer
@bot.event
async def on_member_join(member):
    print("A member just joined and his name is" + member.name)
    mid = member.id
    role = discord.utils.get(member.server.roles, name="Default")
    await bot.add_roles(member, role)

    Rules = "1. Do not DM the Owner or any other staff unless they have DMed you first! \n 2. Be kind, \n 3. Use common sense, \n 4. No swearing, \n 5. No racism or bullying, \n 6. No advertising, \n 7. Do not chat in #music Text or Voice channels, \n 8. Do not spam #applications if your application is accepted or denied! This is only to be used for submitting and staff members replying to the application. \n 9. Do not use or abuse bot commands you should not be using! \n 10. Do not @ any staff members unless it is an emergency.  "

    await bot.send_message(bot.get_channel('479685091749134346'), 'Hello <@%s>, Welcome to Osis Nation, please read all the rules carefully' % (mid))
    await bot.send_message(bot.get_channel('479685091749134346'), (Rules))
    await bot.send_message(bot.get_channel('479685091749134346'), 'If you agree write !Agree. If you do not agree write !Decline')
@bot.event
async def on_message(message):
    if message.content.upper().startswith("!AGREE"):
        await bot.send_message(bot.get_channel('479685091749134346'), 'You will be redirected to the server in 5 seconds')
        time.sleep(5)
        role = discord.utils.get(message.server.roles, name="Default")
        await bot.remove_roles(message.author, role)

答案 1 :(得分:0)

我认为最简单的方法是限制@everyone角色。然后再使用一个更宽松的角色@citizen(或任何您想称呼的角色):

@bot.event
async def on_member_join(member):
    print("A member just joined and his name is" + member.name)
    citizen = discord.utils.get(member.server.roles, name="citizen")

    # DM user with rules
    await bot.send_message("Hello {0.mention}, welcome to {0.server.name}".format(member))
    await bot.send_message(member, Rules)
    dm = await bot.send_message(member, "Type !agree to agree")

    # get response
    check = lambda s: s.lower().startswith("!agree")
    msg = await bot.wait_for_message(channel=dm.channel, author=member, check=check)

    await bot.add_roles(member, citizen)