Gerir o teu próprio servidor do Discord pode dar muito trabalho, e é por isso que os bots que se en­car­re­gam das funções ad­mi­nis­tra­ti­vas são tão populares. Com a bi­bli­o­teca discord.py e alguns co­nhe­ci­men­tos básicos de Python, podes criar um bot com relativa fa­ci­li­dade.

Crie o seu próprio bot do Discord com Python, passo a passo

Antes de começar a programar o bot do Discord, tens de o criar. Para tal, envia o teu pedido ao Discord e segue os passos ne­ces­sá­rios. O código de pro­gra­ma­ção de que precisas para o teu bot do Discord dependerá das tarefas que pretendes au­to­ma­ti­zar. O bot que te mostramos neste tutorial serve para atribuir funções e per­mis­sões dentro de um servidor do Discord.

Passo 1. Instalar o discord.py

Uma vez que a bi­bli­o­teca discord.py do Python é utilizada para criar o bot, será a primeira coisa que precisará de instalar no seu sistema. Como é habitual no Python, a ins­ta­la­ção é feita através do pip. No Windows, o comando que deve in­tro­du­zir no terminal é o seguinte:

py -3 -m pip install -U discord.py
python

Passo 2. Criar um ficheiro Python

Crie um novo ficheiro Python para programar o seu bot. Para tal, pode utilizar di­fe­ren­tes editores de código ou um ambiente de de­sen­vol­vi­mento integrado (IDE), como o Pycharm.

Passo 3. Es­ta­be­le­cer a ligação com o Discord

Importe a bi­bli­o­teca do Discord para o seu ficheiro Python e es­pe­ci­fi­que o token que recebeu ao registar o seu bot na página de pro­gra­ma­do­res do Discord. Para tal, substitua o marcador de posição pelo token do seu bot:

import discord
TOKEN = token_marcador_de_posición
python

Precisas da bi­bli­o­teca para interagir com a API do Discord. Também precisas de uma instância do objeto cliente para te ligares ao Discord. A instância é criada com o seguinte código:

client = discord.Client()
python

Passo 4. Verificar se a ligação foi es­ta­be­le­cida cor­re­ta­mente

Em seguida, deve incluir um método as­sín­crono no seu ficheiro Python que verifique se o seu bot se ligou cor­re­ta­mente ao servidor do Discord. Para tal, deve responder ao evento on_ready definido na API discord.py. Utilize o decorador (ou padrão de design) do Python @client.event para que a sua função funcione como um con­tro­la­dor de eventos.

@client.event
async def on_ready():
    print(f'{client.user} está conectado a los siguiente servidores:\n')
    for server in client.guilds:
        print(f'{server.name}(id: {server.id})')
python
Nota

Fre­quen­te­mente, utilizam-se funções as­sín­cro­nas para programar bots do Discord. Isto significa que a função é executada num segmento dedicado, que está de­sa­co­plado do segmento principal. Desta forma, o segmento principal não fica bloqueado e as tarefas do bot podem ser exe­cu­ta­das em paralelo.

Passo 5. Adicione fun­ci­o­na­li­da­des ao seu bot

A API discord.py define um evento on_message que o ajuda a executar as funções do seu bot. O evento é ativado sempre que o seu bot do Discord recebe uma mensagem. O método que gere o evento deve verificar primeiro de quem é a mensagem e, em seguida, executar a função pre­ten­dida; no nosso caso, adicionar funções.

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('!add_role'):
        # Obtener el nombre del rol
        role_name = message.content.split(' ')[1]
        # Encontrar el rol de Discord correspondiente
        role = discord.utils.get(message.guild.roles, name=role_name)
        # Comprobar si el rol existe
        if role is None:
            await message.channel.send(f'El rol "{role_name}" no existe)
            return
        # Asignar el rol
        await message.author.add_roles(role)
        await message.channel.send(f'El rol "{role_name}" se ha asignado a {message.author}')

Em primeiro lugar, a função verifica se a mensagem recebida provém do próprio bot do Discord. Se for esse o caso, a função é encerrada com a instrução return.

Caso contrário, o conteúdo da mensagem é analisado mais de­ta­lha­da­mente. Se a mensagem começar com a sequência !add_role, o bot in­ter­preta-a como um comando. Ou seja, os uti­li­za­do­res do servidor devem iniciar os pedidos dirigidos ao bot do Discord com a sequência !add_role. Lo­gi­ca­mente, é possível utilizar qualquer sequência como comando. No entanto, é pre­fe­rí­vel que a sequência utilizada seja uma sequência que não seja empregada na linguagem natural.

A partir de uma mensagem que o bot in­ter­preta como um comando válido, o nome da função so­li­ci­tada é de­ter­mi­nado através da função split() do Python. Em seguida, procura-se a função cor­res­pon­dente no servidor. Para tal, pode utilizar o objeto message, que contém várias in­for­ma­ções sobre o seu servidor no item message.guild.

Se a função não existir e, por con­se­guinte, tiver o valor «None», é emitida uma mensagem de erro e a função é encerrada com a instrução return. Caso contrário, é atribuída a função cor­res­pon­dente com a função add_roles da bi­bli­o­teca dicord.py, que também está definida no objeto message.

Ir para o menu principal