Criando um bot para o Discord usando C# e DSharpPlus

Discussão em 'Software' iniciado por Animadoria, 21 Junho 2018.

  1. Animadoria
    Offline

    Animadoria Membro Conhecido VIP Sabotador.com

    Afiliado:
    17 Agosto 2014
    Mensagens:
    746
    Avaliações:
    +584 / -1
    Apelido no Minecraft:
    Animadoria
    [​IMG]
    [​IMG]
    0. Noções Básicas e Preparação
    1. Iniciando o Bot
    2. Introdução a Comandos
    3. Interatividade
    4. Voz
    5. Mudanças


    [​IMG]
    Antes de realmente começarmos, precisamos definir umas noções básicas:
    • Este bot pode ser programado em Windows, Mac e Linux. Neste tutorial, ensinarei como fazer com Windows e Mac, usando .NET Core.
    • A IDE que estaremos usando será Microsoft Visual Studio (em Windows, usaremos a Community 2017, em Mac usaremos Community 2017 for Mac. Como as interfaces são diferentes, "textos ocultos" explicam como fazer com as interfaces diferentes. O código é igual nos dois sistemas operacionais).

    INSTALANDO A IDE:

    A IDE é essencial para criar seu bot.
    Como é algo que muita gente já ensinou, deixo aqui alguns links:
    - Install Visual Studio for Mac - Visual Studio for Mac | Microsoft Docs (Para Mac)
    - Install Visual Studio 2017 - Visual Studio | Microsoft Docs (Para Windows. Nota: Neste link, no Step 4, encontre Net Core na lista)


    CRIANDO UM BOT USER:

    Agora a gente precisa de um user bot, ou seja, de um bot verdadeiro, o meio de comunicação com o Discord!
    Para isso, vamos em Discord - Developer Documentation.
    Clique em Novo Aplicativo (1). Após isso, dê um nome para o seu bot, e no fim da página clique em "Criar App".
    Após isso, partes novas irão aparecer. Encontre uma dizendo "Criar um usuário Bot" e clique (2), e depois escolha "Sim, faça isso". Agora você tem um user bot!
    Você vai precisar do Token. Na parte de Bot agora disponível, clique em "clique para revelar" na parte de Token (3). CUIDADO! NÃO PARTILHE ESTE TOKEN COM NINGUÉM!

    Agora temos um Bot e o seu Token, que vamos usar no próximo tópico.




    Número de referênciaImagem
    1 upload_2018-6-21_15-16-17.png
    2 upload_2018-6-21_15-22-48.png
    3 upload_2018-6-21_15-28-17.png

    [​IMG]
    Com a IDE e com o User Bot pronto, vamos começar a programar!
    Abra o Visual Studio e clique em "New Project" (Mac, em inglês) OU "Criar novo projeto..." (Windows, em português) (1) e crie um Projeto do Console .Net Core (2).
    Com o projeto criado, precisamos de adicionar o DSharpPlus! Pois é...
    Na parte esquerda, clique com o botão direito em "Dependencies", e clique em "Add Packages". Procure por DSharpPlus e adicione o primeiro.
    Na parte direita, clique com o botão direito em "Dependências", e clique em "Gerenciar pacotes do NuGet". Clique em procurar, e procure por DSharpPlus, e adicione o primeiro.
    Com DSharpPlus adicionado, vamos começar!
    AVISO: Java e C# tem sintaxes parecidas, mas não são iguais. Para não passar vergonha, recomendo ler: C# Coding Standards and Naming Conventions - dofactory.com

    Então, antes do Main, vamos declarar a variável pública client como DiscordClient.
    Vamos também criar uma tarefa assíncrona (async Task) com o nome RunBotAsync.
    Ou seja...
    Código (Forge Crash):
    public DiscordClient client;

    public async Task RunBotAsync() {
    }
    (a tarefa fica depois do Main!)
    Criaremos uma varíavel cfg sendo new DiscordConfiguration. Algo como:
    Código (Forge Crash):
    public async Task RunBotAsync() {
                var cfg = new DiscordConfiguration
                {
                    AutoReconnect = true,
                    Token = "SEU TOKEN AQUI",
                    TokenType = TokenType.Bot,
                    UseInternalLogHandler = true,
                     LogLevel = LogLevel.Debug

                };
            }
    O Token será aquele que a gente pegou quando criou o UserBot. Se você perdeu a token, só ir no site e pegar.

    Depois, a variável client que a gente criou, vamos dizer para usar a configuração, com o new DiscordClient(cfg).

    Vamos agora ligar o bot! Use await client.ConnectAsync(). Note o await, significa que é assincrono!

    E vamos também adicionar um await Task.Delay(-1), faz com que o programa fique sempre executando sem necessidade de executar uma thread extra.
    Ainda não estamos prontos... falta adicionar no Main!

    Tiremos o Console.WriteLine, e adicionaremos um new Program().RunBotAsync().GetAwaiter().GetResult();

    Agora é adicionar o bot à nossa guilda. Para adicionar, podemos ir no site de desenvolvedores do Discord, Discord - Developer Documentation, e clicamos em "Gerar URL OAuth". Copie o link que deu e cole no seu browser, e adicione na sua guilda!

    Classe final:
    Código (Forge Crash):
    using System;
    using System.Threading.Tasks;
    using DSharpPlus;

    namespace MeuPrimeiroBot
    {
        class Program
        {
            public DiscordClient client;
            static void Main(string[] args)
            {
                new Program().RunBotAsync().GetAwaiter().GetResult();
            }
            public async Task RunBotAsync() {
                var cfg = new DiscordConfiguration
                {
                    AutoReconnect = true,
                    Token = "USE SEU TOKEN AQUI",
                    TokenType = TokenType.Bot,
                    UseInternalLogHandler = true,
                    LogLevel = LogLevel.Debug
                };
                client = new DiscordClient(cfg);
                await client.ConnectAsync();
                await Task.Delay(-1);
            }
        }
    }
     
    Se iniciarmos o programa (clicando no símbolo de reproduzir no topo do Visual Studio), voilá! O Bot fica online!
    upload_2018-6-21_19-21-4.png
    Quer adicionar comandos? No próximo tópico, explicará tudo.





    Número de referênciaImagem Windows Imagem Mac
    1 [​IMG] upload_2018-6-21_17-28-50.png
    2 upload_2018-6-21_17-45-33.png upload_2018-6-21_17-45-11.png
     
    • Vencedor Vencedor x 2
    • Top Top x 1
    • Útil Útil x 1
    Última edição: 22 Junho 2018
  2. FRNathan13
    Offline

    FRNathan13 Membro Ativo

    Afiliado:
    7 Outubro 2015
    Mensagens:
    80
    Sexo:
    Masculino
    Avaliações:
    +48 / -0
    Apelido no Minecraft:
    nathan1302
    Post interessante. Principalmente o D#+ (DSharpPlus), que tem uma API bem dinámica.
     
    • Concordo Concordo x 1
    • Amigável Amigável x 1
    Última edição: 21 Junho 2018
  3. Lucas_Gamer13
    Online

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,716
    Sexo:
    Masculino
    Avaliações:
    +1,611 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    Achei legal, interessante...

    @offtopic
    Pera... Você não era o cara do minecraft em dll?
     
    • Gostei Gostei x 1
  4. Lucas_Gamer13
    Online

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,716
    Sexo:
    Masculino
    Avaliações:
    +1,611 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    Sim :p
     
    • Gostei Gostei x 1
    • Engraçado Engraçado x 1
  5. Duyzee
    Offline

    Duyzee Membro Conhecido VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    28 Fevereiro 2017
    Mensagens:
    707
    Sexo:
    Feminino
    Avaliações:
    +482 / -1
    Apelido no Minecraft:
    Kaljak_Sirah1
    Belo tutorial mano, estou ansioso para os novos Tópicos sobre como criar um bot para discord usando c e dsharpplus

    Desejo sucessos e pessoas saindo criando vários bots inovadores com esse tutorial seu :p
     
  6. Animadoria
    Offline

    Animadoria Membro Conhecido VIP Sabotador.com

    Afiliado:
    17 Agosto 2014
    Mensagens:
    746
    Avaliações:
    +584 / -1
    Apelido no Minecraft:
    Animadoria
    Adicionado o tópico 1!
    Thanks to @nathan13022000 pelas imagens no Windows!
    --- Post duplo mesclado, 22 Junho 2018, Data da postagem original 21 Junho 2018 ---
    Edição: corrigido imagens no tópico 1, troquei o Mac c/ o Windows :zipped_mounth::zipped_mounth:
     
    • Informativo Informativo x 1

Compartilhe esta Página