O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Python - Criação de um Bot para o Discord

Iniciado por makergame2000, 19/12/2017 às 12:58

19/12/2017 às 12:58 Última edição: 06/02/2019 às 12:31 por makergame2000
Python - Criação de um Bot para o Discord




Ao fazer este tutorial vou supor que você não tem conhecimentos muito fortes em Python portanto não vou entrar em detalhes na linguagem.
Neste tutorial vamos criar um Bot para o Discord em Python, um bot simples.
Vai ser preciso usar Python na sua ultima versão que é a Python 3.6.4, pode a encontrar aqui https://www.python.org/downloads/ Python
Depois é preciso a API do discord para python, vamos usar o Discord.py que pode ser encontrado aqui https://github.com/Rapptz/discord.py, não é necessario fazer download por aqui
Antes de começar é preciso ter uma conta no Discord registada, contas visitantes não funcionam.
Você pode usar qualquer IDE mas eu uso Visual Studio Code que pode encontrar no site oficial https://code.visualstudio.com/download


Instalar Discord.py
Abra o CMD, faça "pip install discord.py"
Spoiler
[close]
No meu caso como já tenho instalado vai aparecer isto.

Configurar o Bot no Discord
Depois de instalar o Discord.py vá até esta página https://discordapp.com/developers/applications/me, aqui estão as suas aplicações feitas para o discord.
Crie uma nova.
Spoiler
[close]
Coloque um nome para o Bot, também pode colocar uma imagem para o bot, neste exemplo não será preciso uma imagem
Spoiler
[close]
Por fim clique em "Create App"
De seguida vai aparecer por baixo da descrição isto, clique em "Create User Bot"
Spoiler
[close]
E pronto o Bot está ativo e agora é preciso programar o Bot
Guarde o Client ID do bot porque é preciso para depois ligar o bot pelo código
Spoiler
[close]
Não partilhe este código com ninguem porque depois qualquer pessoa pode modificar o bot

Colocar Bot num grupo
Para o seu Bot entrar numa conversa você precisa de ser moderador ou qualquer tipo de autorização, neste exemplo eu fiz um grupo só para mim onde vou testar o Bot
Para aceder á janela de autorizar bots use este link e ponha o código do ID em COLOQUE_ID_AQUI
https://discordapp.com/oauth2/authorize?&client_id=COLOQUE_ID_AQUI&scope=bot&permissions=0

Spoiler
[close]
Depois o Bot irá aparecer em Offline no grupo que você fez adicionar
Spoiler
[close]




Progrmar Bot
Como já tinha dito eu vou usar VS:Code, use o IDE que quiser não diferença porque o que vai ligar o Bot é a URL que vamos obter mais á frente e ao momento em que o Bot é  executado o Bot fica online, portanto você só precisa de um interpretador de python se você quiser pode usar o bloco de notas como IDE.

Vamos começar a Importar funções do discord e outras coisas importantes.
Ao fazer este tutorial como já tinha dito vou supor que você não tem conhecimentos muito fortes em Python e portanto para deixar isto simples não vou explicar o que cada classe faz ou o que é uma class ou uma função e como python funciona.
Objetivo aqui é apenas criar um bot para o discord.
import discord
import asyncio
import random
import os

De seguida precisamos disto
cliente_discord = discord.Client()

@cliente_discord.event
async def on_ready():
    print('LIGOU')

Este evento vai escrever na consola que o Bot está ligado e que tudo correu bem.

@cliente_discord.event
async def on_message(texto):
    if (texto.author.id == 'ID DO BOT'): return

Esta ultima linha serve para o bot não ler o que ele proprio escreve porque senão isto pode causar loops e quebrar o programa

Até agora o nosso script está assim
Spoiler

import discord
import asyncio
import random
import os

cliente_discord = discord.Client()

@cliente_discord.event
async def on_ready():
    print('LIGOU')

@cliente_discord.event
async def on_message(texto):
    if (texto.author.id == 'XXXXXXXXXXXX5043'): return

[close]
E agora vamos criar Comandos
Este bot vai ser ativado quando é chamado pelo nome, ou seja que qualquer comando para ser feito é preciso chamar o Bot

O primeiro comando que vamos fazer é a capacidade de escolher um valor de 1 a 6 fazendo assim um dado
if texto.content.startswith('Bot'): #Se uma frase tiver Bot no inico
        frase = texto.content[3:].strip() #Tira 'Bot' da frase
        if frase.lower().startswith('dado'): #ATira dado de 1 a 6 
                        numr = random.randint(1,6)
                        await cliente_discord.send_message(texto.channel,str(numr))
                        return

Mas antes de testar pela primeira vez o Bot é preciso no final e sempre no final estar esta linha
cliente_discord.run('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5XKDL4')

Isto é a URL do bot que se obtem na pagina do seu Bot no Discord abaixo do ID
Spoiler
[close]
Até agora temos código assim.
Spoiler
[close]
O bot já está pronto para ligar

E aqui esta como Online e a dar valores

Vamos fazer mais um comando, aqui ele responde a perguntas, com respostas já definidas numa array que o python escolhe aleatoriamente
if frase.endswith('?'):
                        resposta = random.choice(['Não respondo a isso','Sim','As vezes','Não','Claro','NUNCA!','Um dia talvez','A resposta está dentro de ti','Mais ou menos','Uma Bosta','Podia ser pior'])
                        await cliente_discord.send_message(texto.channel,resposta)
                        return

Ele vai mostrar uma resposta sempre que vir '?' no final.
Spoiler


[close]

Código Final
import discord
import asyncio
import random
import os

cliente_discord = discord.Client()

@cliente_discord.event
async def on_ready():
    print('LIGOU')

@cliente_discord.event
async def on_message(texto):
    if (texto.author.id == 'ID'): return    
    if texto.content.startswith('Bot'): #Se uma frase tiver Bot no inico
        frase = texto.content[3:].strip() #Tira 'Bot' da frase
        if frase.lower().startswith('dado'): #ATira dado de 1 a 6 
                        numr = random.randint(1,6)
                        await cliente_discord.send_message(texto.channel,str(numr))
                        return
        if frase.endswith('?'):
                        resposta = random.choice(['Não respondo a isso','Sim','As vezes','Não','Claro','NUNCA!','Um dia talvez','A resposta está dentro de ti','Mais ou menos','Uma Bosta','Podia ser pior'])
                        await cliente_discord.send_message(texto.channel,resposta)
                        return
cliente_discord.run('URL')

Agora coloque os seus próprios comandos ou faça um sistema de conversa, ou até um jogo que perfeitamente possivel, como por exemplo um jogo de cartas.

Queria saber se você poderia criar mais comandos para ajudar as pessoas

Citação de: Idealista online 29/01/2019 às 02:06
Queria saber se você poderia criar mais comandos para ajudar as pessoas

Isto é mesmo tudo o que há ligar o bot ao discord é só isso é assim tão simples mesmo, tudo o resto é programação normal em python, ler texto, colocar imagens, ect é tudo como se fosse fazer um programa normal usando python os comandos são os mesmos https://www.w3schools.com/python/

No meu exemplo eu apenas leio input e vejo o que está escrito e faço uma função de dado que faz output do discord, isso é tudo python normal