Coder Social home page Coder Social logo

lccbot's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

thulio-carvalho

lccbot's Issues

Funcionalidade schedule na API com mock

Descreva a feature em detalhes

Deve ser implementado na API a funcionalidade de obtenção de horários no dia atual. Para simplificar: será necessário apenas a criação de um endpoint GET /schedule que deverá retornar um json simulando os horários de aulas no dia por LCC.

Importante: Será ótimo se na finalização dessa issue tivermos uma estrutura de código que facilite modificações posteriores. Recomendo fortemente estudar um pouco sobre princípios de design de código.

Necessidade da feature:

Essa feature é a principal do primeiro ciclo do desenvolvimento.

Como ela pode ser implementada:

Um boa forma de desenvolver essa funcionalidade pode ser tentando replicar as estruturas de projetos de APIs RESTful (com algumas ressalvas, pois no nosso caso não é necessário persistir dados em banco, por exemplo).
Existem diversos tutorias de codificação de APIs REST em python com flask, encontrei uma que parece ser boa:

Obs: Acredito que seguir um tutorial bem explicado para construção de uma API REST pode ser bastante útil para aprender a desenvolver essa nossa funcionalidade específica.

O retorno json esperado do endpoint /schedule pode seguir o exemplo:

{
	"LCC1": [],
	"LCC2": [{
			"course": "Lab. de Programação 2",
			"startTime": "10:00",
			"endTime": "12:00"
		},
		{
			"course": "LEDA",
			"startTime": "14:00",
			"endTime": "16:00"
		}
	],
	"LCC3": []
}

Integrar API do Heroku no Bot

Descreva a feature em detalhes

Trocar, no código do bot, qualquer referência à URL da API
(dica: procure por requests.get(, geralmente esse cara sempre vai chamar a API)
para a nova URL da API.

Necessidade da feature:
Essa feature é necessária para que o bot consuma da API oficial.

Gerar BOT e TOKEN na página do discord

Deve ser criado uma aplicação do tipo Bot na página de desenvolvedores do discord
e gerado o token.

Necessidade da feature:

É o passo inicial para construção do bot do discord. Sem a criação da aplicação na página do discord, não é possível acesso à API do discord.

Como ela pode ser implementada:

O discord.py tem uma documentação instruindo a criação do bot no discord.

Contexto adicional:
Observação importante: Não compartilhe o token do bot no repositório. Caso precise utilizá-lo no futuro, decidiremos técnicas apropriadas de esconder o token. Qualquer pessoa que tenha o token pode controlar o bot. O armazenamento seguro é de extrema importância.

Criação de um bot simples

Criação de um bot simples que responde qualquer mensagem.

Necessidade da feature:

Essa issue é útil para termos um código inicial no repositório. Ela deve ser a primeira issue a ter como efeito colateral geração de código no repositório.

Como ela pode ser implementada:

Creio que seguir o quickstart na documentação do discord.py é suficiente.

Apenas relembrando: Uma nova branch para essas alterações deve ser criada a partir da branch develop deste repositório.
Ao finalizar o desenvolvimento desta issue, abrir um pull request enviando as alterações para a branch develop para que o código possa ser revisado e aprovado.

Observação Importante: Não compartilhe o token ou deixe explícito em qualquer código ou arquivo que seja enviado ao github. O armazenamento seguro do token é essencial: Nessa issue não se preocupe em subir o código com o token: qualquer placeholder inválido ou string vazia no local do token será aceito, ou seja, tudo bem enviar para o repositório um código que contenha:

client.run('')

Podemos nos preocupar com como referenciar o token em outra issue.

Contexto adicional:

Links que podem ajudar:
Discord.py Quickstart
Git Guide

Qualquer dúvida comente na issue e marque @Thulio-Carvalho ou entre em contato pelo discord!

issue teste

Descreva a feature em detalhes

Necessidade da feature:

Como ela pode ser implementada:

Contexto adicional:

Criação de um servidor discord de testes

Deve-se criar um servidor para utilizarmos em testes no discord.

Nenhuma referência ao discord de testes deve entrar no repositório, esta issue é apenas para a criação do servidor.

Necessidade da feature:

Um servidor de testes é necessário pois será onde executaremos o BOT até que esteja em uma versão estável.

Como ela pode ser implementada:

Há uma artigo referência que ensina a criar um servidor novo.

Criação de um endpoint GET básico

Essa feature tem como objetivo a criação de um endpoint /ping básico

Necessidade da feature:

A feature é necessária pois marcará o início da nossa API desacoplada do bot, definida no diagrama da arquitetura base

Como ela pode ser implementada:

Recomendo a utilização do módulo flask.
É necessário implementar apenas um endpoint que responde o método GET /ping
e retorna de informação útil apenas o status HTTP.
Essa API deverá ser desacoplada do BOT.

Contexto adicional:

Links úteis:
Flask Quickstart
Rest API

Qualquer dúvida entrar em contato com @Thulio-Carvalho ou comentar na issue!

Implementar e integrar serviço de web scraping

Descreva a feature em detalhes

Essa issue depende do desenvolvimento de #21.

Os dados reais de horários nos LCCs estão disponíveis nos seguintes links:

Na API, ao receber uma requisição GET em /schedule deve-se extrair os dados de horários de cada LCC no dia atual
e retornado um json seguindo o exemplo:

{
	"LCC1": [],
	"LCC2": [{
			"course": "Lab. de Programação 2",
			"startTime": "10:00",
			"endTime": "12:00"
		},
		{
			"course": "LEDA",
			"startTime": "14:00",
			"endTime": "16:00"
		}
	],
	"LCC3": []
}

Necessidade da feature:

A issue permitirá que o /schedule funcione como esperado, e não apenas com dados mockados.

Como ela pode ser implementada:

Recomendo a utilização da biblioteca em python BeautifulSoup

Contexto adicional:

Adicionar utilização de Docker

Descreva a feature em detalhes

O projeto atualmente está utilizando python3 e algumas dependências como o Flask.
Facilitaria bastante o deploy e o trabalho de mais de um dev caso seja utilizado docker para subir a aplicação.

Necessidade da feature:

Conforme mais pessoas contribuem para o projeto e mais dependências são adicionadas, vários conflitos de versão / dependência inexistente localmente podem acontecer. Acredito que configurar a utilização de docker para subir a aplicação pode evitar muitos problemas.

Contexto adicional:

Docker Getting Started

Integrar o ping e o schedule no bot

Descreva a feature em detalhes

A funcionalidade de schedule e ping já foram criadas na API, mas ainda não foram mapeadas no bot. Ou seja, ainda não há como acessar as funcionalidades pelo discord, apenas fazendo uma requisição diretamente nos endpoints.

Necessidade da feature:

A feature é necessária pois finalmente expõe as funcionalidades de ping e schedule para os usuários.

Como ela pode ser implementada:

Recomendo utilizar o módulo requests para fazer requisições GET nos endpoints, e utilizar Embeds para ter uma saída mais bonita.

discord.py - Embed Generator
Requests - Quickstart

Comando help

Descreva a feature em detalhes

É interessante o bot ter um comando help listando todos os comandos possíveis dele e explicando como utilizar.
Por exemplo, quando um usuário digitar !help o bot poderia responder:

  !ping - Pong!
  !horarios <lcc1 | lcc2 | lcc3> - Verifica os horários de aula hoje em todos os LCCs ou em um LCC específico.
  !status <lcc1 | lcc2 | lcc3> - Verifica a disponibilidade do serviço SSH nos servidores dos LCCs ou de uma LCC específico. 

Não é necessário implementar na API, pois o próprio bot deve conhecer os comandos disponíveis.
Só devemos agregar ao help comandos que já estão codificados e funcionando e não comandos futuros, pois pode levar o usuário a pensar que há acesso a essas funcionalidades.

Necessidade da feature:

Essa funcionalidade é necessária pois qualquer usuário novo do bot pode não conhecer quais os comandos possíveis e como utilizá-los.

Como ela pode ser implementada:
No bot.py, acredito que implementar apenas uma verificação se a mensagem começa com o prefixo + 'help' é suficiente para detectar o comando.

Contexto adicional:

Discord.py Docs

Melhorar estrutura do repositório

Descreva a feature em detalhes

Essa issue é apenas para organização do repositório nos seguintes diretórios:

├── api/
│   └── app.py
└── bot/
    └── bot.py

Outros códigos que não serão utilizados do bot devem ser removidos: (remover o bot.js, bot2.js.

  1. Renomear botsimples.py para bot.py ou main.py ou app.py
  2. Mover o código do bot para um novo diretório chamado bot
  3. Mover o código da api para um novo diretório chamado api
  4. Renomear o código da api para app.py ou main.py

Status dos Servidores

Descreva a feature em detalhes

Endpoint GET /status que retorna o status do serviço de SSH dos servidores chopper, r2d2, e kirk (relativos ao LCC1, LCC2 e LCC3).

  • Deve ser possível passar por parâmetro o LCC ex: /status&lcc=1, /status&lcc=2, /status&lcc=3.
  • Deve ser possível não passar um LCC por parâmetro.

Necessidade da feature:

Essa feature é útil para qualquer pessoa que deseja obter o status do SSH de um servidor ou de qualquer servidor para, por exemplo, obter algum arquivo que só existe em um LCC.

Como ela pode ser implementada:

Caso seja passado um LCC válido no parâmetro:
  • Retorna HTTP Status 200 caso seja possível iniciar uma conexão SSH com o LCC especificado.
  • Retorna HTTP Status 503 (Service Unavailable) caso não seja possível iniciar uma conexão SSH com o LCC especificado.
Caso não seja passado um LCC no parâmetro (requisição apenas no endpoint /status/):
  • Retorna no corpo da resposta um json com o seguinte formato:
{
	"LCC1": "true",
	"LCC2": "false",
	"LCC3": "false"
}

onde true indica que o serviço SSH do servidor está funcionando e false indica que o serviço SSH do servidor está offline ou com problemas.

Contexto adicional:

O desenvolvimento dessa feature pode ser um pouco parecido com o desenvolvimento da #21. Com a complicação a mais de permitir parâmetros e ser necessário verificar o status do serviço SSH.

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.