GithubHelp home page GithubHelp logo

devpt-org / discord-bot Goto Github PK

View Code? Open in Web Editor NEW
22.0 2.0 23.0 323 KB

Uma experiência colaborativa construindo um BotDiscord devPT utilizando Hexagonal Arch

License: GNU Affero General Public License v3.0

Shell 0.75% TypeScript 95.98% Dockerfile 3.27%
discord-bot javascript hacktoberfest discord discord-js discordbot discordjs hexagonal-architecture

discord-bot's People

Contributors

c0ffeel0ver avatar caioluis avatar hmgsilva1973 avatar hugopeixoto avatar ivopereira avatar joaodcp avatar macabeus avatar mstrk avatar raulcorreia7 avatar rodrigosa7 avatar t-var-s avatar zorkpt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

discord-bot's Issues

Implementar perguntas anónimas (pendentes de aprovação)

Seria interessante termos uma funcionalidade em que um utilizador através de:

  • uma mensagem direta para o bot (se possível) OU
  • através de uma página web básica com um formulário OU
  • num canal em que só o próprio utilizador pode ver (costumava-se usar algo semelhante para sistemas de tickets no Discord?)

Assim que esta mensagem é recebida pelo bot, esta fica pendente de aprovação num canal apenas visível para admins (sempre anonimificada).

Exemplo:

devPT Bot says:
Mensagem 09e0c047-bf50-4983-a245-08c6cb2654f1
"Preciso de procurar outras oportunidades que paguem mais mas não sei onde. Alguém me pode sugerir bons sites para encontrar trabalho?"

Assim que aprovada (p.ex. um membro do staff respondendo neste canal privado com um !aprovar 09e0c047-bf50-4983-a245-08c6cb2654f1) esta é publicada num canal público a designar - se possível utilizando a nova funcionalidade de Fóruns.

Assim, qualquer utilizador que queira manter o seu anonimato em perguntas mais pessoais poderá fazê-lo sem problema.

Adicionar comando !ja (Just Ask)

No bot que tínhamos ativo no Discord, sempre que uma mensagem com o texto “!ja” era enviada, o bot respondia no mesmo canal com o conteúdo “ 👉 https://dontasktoask.com/pt-pt/”.

Idealmente poderíamos implementar esta funcionalidade neste bot.

Diria que numa primeira versão podemos implementar uma versão muito básica e conforme percebamos quais as necessidades em termos de funcionalidades poderemos eventualmente olhar para o issue #23 para organizarmos melhor o código.

Implementação da funcionalidade de escolha de cargos

Atualmente a escolha de cargos era feita de acordo com a seleção de emojis.

image

Olhando para as novas possibilidades do Discord, talvez pudéssemos tentar ter algo deste género:

image

(retirado daqui: https://discord.com/blog/welcome-to-the-new-era-of-discord-apps/)

Este issue por agora seria meramente de research até para percebermos como deve ser o UX para o utilizador.

Estejam à vontade para partilhar comentários. Podem claro avançar com uma implementação, mas que estará sujeita a alterações até definirmos exatamente o que queremos.

PROBLEMAS GRAVES

Quais são os caracteres disponíveis para este bot? Unicode? discord markdown?

Já agora, para além do <@${context.params.event.user.id}> temos mais alguma tag? como por exemplo hora de entrada? Seria engraçado dizer a alguém que entrasse às 16:30 que o giveaway de uma 3070 foi às 16:24 por exemplo

Converter para TypeScript

O projeto e a developer experience beneficiariam das tipagens e do acesso a funcionalidades de ES6 e ES7 fornecidas pelo TypeScript.

Tendo em conta o tamanho do projeto ser ainda bastante reduzido, penso que seria uma boa altura para a conversão da tecnologia.

Adicionar testes

O projeto atual deveria ter uma pipeline de testes implementada.

Sugeria utilizarmos jest tendo em conta ser o mais consensual em JavaScript, mas estou aberto a ideias.

Adicionar suporte a Docker

Para facilitar desenvolvimento local e paridade entre dev e prod seria interessante adicionar suporte a Docker e eventualmente a docker-compose.

  • Criar suporte para Dockerfile de desenvolvimento (#43)
  • Criar suporte para Dockerfile de CI
  • Criar suporte para Dockerfile de produção

Adicionar README.md

O projeto atual deveria ter um ficheiro README.md que explique o conceito do bot.

Para além de uma introdução básica do projeto, seria benéfico ter também no README:

  • instruções para desenvolvimento local (ainda não implementado)
  • instruções da execução de testes (ainda não implementado)

Integrar Jobs com Reaction Roles

A Ideia é o user tem a hipotese de registar o seu stack, anos de exp. , o que faz atualmente se é remote ou não.

Ao executar um comando por exp !profile o user ter opções entre essas todas e ao selecionar por exemplo a stack aparecem opções em botoes/reactions que ao selecionar são atribuidas as roles automaticamente.

Os anos de exp ficava generico por exp < 1 ano , 1 a 3 anos, 3 a 5, 5 a 10 anos, > 10 anos...

O que isto iria influenciar?

Hipotese de criar opções like :open to work: em que pudessemos ativar alertas e sempre que um !jobs fosse adicionado com a stack do user ele seria alertado por dm ou outro meio

Hipotese de criar filtros nos !jobs, o user poderia filtrar ser alertado apenas para works remote em c# por exemplo

Aumentava a eficácia dos classificados pois mesmo que um user fosse inativo no chat iria ser alertado se quisesse

Desacoplar comandos e mensagens do commandUseCaseResolver

Contexto

Depois de uma alteração que fiz ao comando !ja, notei que as mensagens dos comandos estão todas acopladas ao resolver que lê os comandos. Para facilitar a manutenção, revisão do código e rapidez de aprovação de mudanças, sugiro que os comandos e suas respectivas mensagens sejam desacoplados do resto da lógica. Talvez podíamos fazer uma estrutura em formato json.

Acho que pode ser um bom first issue para alguém, mas se ninguém fizer, eu abro um PR e proponho mudanças.

Implementação de arquitetura extensível

Idealmente, o código do bot deverá ter lugar para ser extensível e gerível.

Como tal, a arquitetura atual é demasiado coupled para permitir isso.

Alguns use-cases a serem eventualmente implementados no bot para que se possa perceber melhor que tipo de arquitetura se poderia almejar atingir seriam:

  • envio de mensagens periódicas para determinado canal
  • envio de mensagens de boas-vindas
  • responder a uma mensagem publicada em determinado canal (por exemplo: !ja atualmente devolve 👉 https://dontasktoask.com/pt-pt/)

Adicionar commando !c/!jobs (classificados)

Este comando torna o canal de Classificados fechado.

Quando um utilizador o chama, são pedidas varias informações em prompt que irão obrigar uma estrutura fixa de ofertas de trabalho, sendo assim essas opções obrigatórias/opcionais

Após o utilizador enviar esse comando serão criadas as threads para discussão do mesmo e o comando será removido do chat que foi chamado.

Adicionar suporte a Gitpod

Adicionar o Gitpod permitirá que qualquer colaborador possa iniciar uma máquina pronta a programar o projeto em apenas alguns segundos (apenas tendo que configurar um token de um bot Discord criado para o efeito), automatizando a sua persistência.

É uma boa adição também para a review de PRs pela facilitação do setup de ambientes de desenvolvimento.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.