Doticni
Doticni

Reputation: 51

Discord.py Add Role to member

I'm currently working on discord.py bot that'll be used to manage licenses on discord server. Currently stuck on how to add role after successful redeem of code. I added 3 roles in my discord server(1Day, 7Days, 30Days), how do I make bot to add role to user who successfully redeemed the license?

Here's my code for now:

import discord
import random
import re
from discord.ext import commands
from discord.utils import get

client = discord.Client()


l1d = open('licenses1d', 'r').read().splitlines()
l7d = open('licenses7d', 'r').read().splitlines()
l30d = open('licenses30d', 'r').read().splitlines()

def license_gen1d():
    a = 'qwertzuiopasdfghjklyxcvbnm1234567890'
    license = ''

    while True:
        while len(license) < 30:
            character = random.choice(a)
            license += character
        if len(license) == 30:
            with open('licenses1d', 'a') as f:
                f.writelines(license + '\n')
                f.close()
            print('Successfuly Generated 1 day License: ' + license)
            return(license)

def license_gen7d():
    a = 'qwertzuiopasdfghjklyxcvbnm1234567890'
    license = ''

    while True:
        while len(license) < 30:
            character = random.choice(a)
            license += character
        if len(license) == 30:
            with open('licenses7d', 'a') as f:
                f.write(license + '\n')
                f.close()
            print('Successfuly Generated 7 days License: ' + license)
            return(license)

def license_gen30d():
    a = 'qwertzuiopasdfghjklyxcvbnm1234567890'
    license = ''

    while True:
        while len(license) < 30:
            character = random.choice(a)
            license += character
        if len(license) == 30:
            with open('licenses30d', 'a') as f:
                f.write(license + '\n')
                f.close()
            print('Successfuly Generated 30 days License: ' + license)
            return(license)


@client.event
async def on_ready():
    print('Logged in as {0.user}'.format(client))


@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$test'):
        await message.channel.send('test!')

    if message.content.startswith('$generate 1d'):
        await message.channel.send('Generating license for 1 day')
        license = license_gen1d()
        await message.channel.send(license)
    
    if message.content.startswith('$generate 7d'):
        await message.channel.send('Generating license for 7 days')
        license = license_gen7d()
        await message.channel.send(license)

    if message.content.startswith('$generate 30d'):
        await message.channel.send('Generating license for 30 days')
        license = license_gen30d()
        await message.channel.send(license)

    if message.content.startswith('$redeem'):
        rcode = re.findall('redeem (.*)', message.content)[0]
        if rcode in l1d:
            await message.channel.send('Successfully Redeemed Code for 1 day use!')
        elif rcode in l7d:
            await message.channel.send('Successfully Redeemed Code for 7 day use!')
        elif rcode in l30d:
            await message.channel.send('Successfully Redeemed Code for 30 day use!')
        else:
            await message.channel.send('Invalid code!')







client.run('token')

Upvotes: 3

Views: 4456

Answers (3)

Doticni
Doticni

Reputation: 51

Here's what I came up with:

member = message.author
role = get(message.guild.roles, name = "test role")
await member.add_roles(role, atomic=True)

Upvotes: 2

Dray
Dray

Reputation: 67

Adding and editing roles to a user,

member = message.author #gets the member to edit
var = discord.utils.get(message.guild.roles, name = "role name")
# This will get the role you want to edit^
member.add_role(var) # adds the role
await var.edit(color=0x008000, reason="The reason")
#and edits the color

For more parameters you can edit visit https://discordpy.readthedocs.io/en/latest/api.html?highlight=role#discord.Role If this works don't forget to mark it as answer.

Upvotes: 2

PythonSnek
PythonSnek

Reputation: 574

If the license key is correct you get the author of the message, then update their roles. with a function of Member.roles. I think the documentation has an example of it (with code) if you search it up. I am not able to open the docs right now and I don't remember the exact command name and parameters.

Upvotes: 1

Related Questions