Saya telah mencoba membuat kode bot perselisihan dan saya berjuang untuk menambahkan peran kepada seseorang. Saya telah membaca beberapa topik dan sepertinya tidak ada solusi yang membantu saya.

Saat ini saya mendapatkan peran ketika reaksi ditambahkan dan nanti saya akan menambahkan peran ke pengguna. Saya memiliki peran yang disebut anggota dan saya mendapatkan kesalahan. Ini kode saya

@bot.event
async def on_raw_reaction_add(payload):
    channel_id = 888832144607166505
    post_cid = payload.channel_id
    reactor = await bot.fetch_user(payload.member)

    if channel_id == post_cid:
        print('Reaction added.', reactor)
        role = await discord.utils.get(reactor.server.roles, name="Member")
        print(role)

Ini adalah kesalahan saya

Traceback (most recent call last):
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "c:\Users\Home\Documents\MandAStudios\bot.py", line 44, in on_raw_reaction_add
    reactor = await bot.fetch_user(payload.member)
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 1384, in fetch_user
    data = await self.http.get_user(user_id)
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\http.py", line 254, in request
    raise HTTPException(r, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In user_id: Value "TestAccount" is not snowflake.
0
user13749822 20 September 2021, 22:03

2 jawaban

Jawaban Terbaik

Anda memiliki reactor = await bot.fetch_user(payload.member) dalam kode Anda, yang salah. Anda memberikan objek anggota, alih-alih id anggota, inilah yang dibutuhkan argumen.

Jadi, Anda perlu mengubahnya menjadi reactor = await bot.fetch_user(payload.member.id)

Selain itu, Anda tidak menetapkan peran kepada siapa pun dan await Anda salah dalam definisi peran.

@bot.event
async def on_raw_reaction_add(payload):
    channel_id = 888832144607166505
    post_cid = payload.channel_id

    # Get reactor with id, without an API request

    reactor = payload.guild.get_member(payload.member.id)

    if channel_id == post_cid:
        print('Reaction added.', reactor)

        # get guild by id

        guild = bot.get_guild(int(payload.guild_id))


        # get role
        
        role = discord.utils.get(guild.roles, name="Member")
        print(role)

        # add role to reactor
        
        await reactor.add_roles(role, reason="self-role reaction")
        

Sumber

1
Razzer 21 September 2021, 17:38

Cara yang benar untuk melakukannya adalah menggunakan guild.get_member(payload.member.id) dan pastikan bot Anda memiliki izin yang relevan Src

@bot.event
async def on_raw_reaction_add(payload):
    channel_id = 888832144607166505
    post_cid = payload.channel_id
    if channel_id == post_cid:
        guild = bot.get_guild(int(payload.guild_id))
        role = discord.utils.get(guild.roles, name="Member")
        print(role)
        member = guild.get_member(payload.member.id)
        await member.add_roles(role, reason="self-role reaction")
0
user13749822 21 September 2021, 18:31