Bot do Matehackers

matehackers, updated 🕥 2022-03-03 19:59:56

Archived

Archiving notice / Aviso de arquivamento: Development active at / Desenvolvimento continua em https://github.com/iuriguilherme/iacecil


MateBot

There is no english README. Sorry about that, I am having a mean time. Just learn brazilian portuguese in the meantime.

O quê

Este é um bot de Telegram baseado em plugins escrito em Python.

Uso

Chame o bot em @mate_obot para ver a lista de comandos.

Quem tiver qualquer dúvida pode entrar no grupo do MateBot no Telegram. Todo mundo lá também tem dúvidas, tu vai te sentir em casa.

Comandos

Atualmente o bot tem os seguintes comandos:

/lista

Exibe os atuais comandos do bot.

Aliases: /help /ajuda

/doar

Exibe informações sobre como ajudar financeiramente o Hackerspace Matehackers.

Alias: /donate

/feedback

Envia mensagem para os desenvolvedores do bot. É necessário enviar um texto.

Exemplo: /feedback Esse bot não funciona!

Alias: /f

/qr

Cria uma imagem png com um QR code representando o texto que foi enviado. O texto pode ser qualquer coisa.

Exemplo: /qr https://matehackers.org

Alias: /qrcode

/random

Gera um número pseudo aleatório bom para criptografia. É possível definir o tamanho da semente como parâmetro.

Exemplos: /random ou /random 32

Alias: /r

/pi

Gera uma boa aproximação de pi.

/phi

Gera uma boa aproximação de phi.

/baixar

Faz download de vídeos ou áudios a partir de URLs suportadas pelo youtube-dl e envia como vídeo ou áudio por mensagem de telegram.

Aliases: /y /ytdl

/arquivar

Arquiva um site na Wayback Machine.

Exemplo: /arquivar https://matehackers.org

Aliases: /a /wm /archive

Por que

História

MateBot foi feito para o hackerspace Matehackers.

Vegga foi feita para o Velivery.

foi feita para a Greatful.

Matebot por sua vez é clonado de CryptoForexBot.
Todos estes bots são inspirados na Paloma, originalmente um bot de IRC inspirado na lalenia, que é um supybot. Viva o software livre.


Como

Roadmap

Ver também o arquivo CHANGES.TXT

Versão 0.1

Nível de automata: combinational logic

Requisitos e escopo
  • [ ] Bot deve responder comandos com valores pré definidos
  • [ ] Bot pode ter personalidade fixa configurada previamente e que vai perdurar durante todo o seu funcionamento
  • [ ] Novas funcionalidades podem ser acrescentadas através de plugins
  • [ ] Funcionalidades podem ser ativadas ou desativadas de acordo com personalidade ou finalidade do bot
  • [ ] Sistema de log para depuração
Funcionalidades
  • [x] Geração de QR Code
  • [x] Download de vídeos do Youtube
  • [x] Geração de números aleatórios
  • [x] Cálculo de hash de textos
  • [x] Recepção de novos usuários em grupos no Telegram
  • [x] Salvar URLs na Wayback Machine
Funcionalidades abandonadas

Funcionalidades presentes em forks ou versão v0.0.14

  • [x] Conversão de valores [coinmarketcap] (cryptoforex)
  • [x] Integração com bancos de dados externos [velivery] (vegga)
  • [x] Envio de SMS e realização de ligações telefônicas [totalvoice] (vegga)
  • [ ] Sistema auxiliar para produção de alimentos [cr1pt0_almoco]
  • [x] Integração com ESP32 e monitoramento climático (climobike)
  • [x] Controle de atividades de trabalho [workrave] ()

Versão 0.2

Nível de automata: finite-state machine

Requisitos e escopo
  • [ ] Bot deve responder comandos de acordo com regras fixas e variáveis conforme aprendizado prévio
  • [ ] Bot deve ter personalidade configurada no estado inicial que pode variar e humor que deve variar
  • [ ] Funcionalidades podem ser ativadas ou desativadas de acordo com mudança de personalidade, humor ou evento de aprendizado
  • [ ] Sistema de coleta de dados para machine learning
  • [ ] Bot deve funcionar no Telegram e no Discord
Funcionalidades
  • [ ] Faz questionários para usuários e armazena as informações em banco de dados
  • [ ] Usa dados obtidos para tomar decisões e adicionar pessoas em grupos de acordo com critérios estabelecidos
  • [ ] Cria perfil de pessoas através de análise de respostas
  • [ ] Otimiza perfil de pessoas através de análise de comportamento

TODO

  • [x] Traduzir este README
  • [ ] Translate the README back to English, Pedro Bó
  • [x] Usar dicionários em todos os retornos de funções
  • [x] Melhorar o empacotamento dos plugins
  • [x] Migrar de telepot para python-telegram-bot tag v0.1.0.0a
  • [x] Acrescentar também código para usar com aiogram tag v0.1.3.0
  • [ ] Tratar as exceções corretamente, principalmente as informativas
  • [x] Exceções informativas para quem está tentando instalar o bot do zero suficientemente tratadas e suficientemente informativas com commit 367613a
  • [ ] Usar Exception Handling do python-telegram-bot
  • [ ] Arquivos para usar com Heroku
  • [x] Arquivos para usar com Docker
  • [ ] Documentar o roadmap com issues, milestones e projetos do github
  • [x] Issues feitas durante uma Terça Sem Fim

Onde

Se vossa excelência quiserdes usar o código deste bot pra fazer o vosso próprio, vós deveis:

Entenderdes e usardes a licença GPL v3

Para mais informações, veja o arquivo LICENSE.md.

Aprenderdes a usar git

...e incidentalmente, Github ou Notabug - que são coisas completamente diferentes de git.

Para mexer no código agora mesmo no Linux:

bash [email protected]:~$ git clone https://github.com/matehackers/matebot.git [email protected]:~$ cd matebot [email protected]:~/matebot$ python3 -m pip install --user --upgrade pip pipenv [email protected]:~/matebot$ pipenv install [email protected]:~/matebot$ pipenv run matebot

Grupo de usuária(o)s e desenvolvedora(e)s

Eu criei um grupo novo para quem quiser conversar sobre, usar, testar, desenvolver e acompanhar o processo de desenvolvimento, teste e uso do bot: https://t.me/joinchat/CwFUFkf-dKW34FPBjEJs9Q

Grupo só para testar bots (pode gerar o caos): https://t.me/joinchat/CwFUFhbgApLHBMLoNnkiRg

Grupo para testar o plugin de logs: https://t.me/joinchat/CwFUFhy2NQRi_9Cc60v_aA

Pra testar o plugin de logs, coloque o bot neste grupo e use o chat_id -481703172 no arquivo de configuração (bot.users['special']['log'])


Dependências

Este bot foi testado com Python 3.7 e 3.8; Se vós não tiverdes Python, instale!

Estamos usando Aiogram, Flask e Python Telegram Bot, então é necessário instalá-los para rodar o bot.

Ritual de instalação:

pipenv

O jeito mais fácil de todos é usar pipenv, inclusive está incluso o Pipfile no repositório:

bash [email protected]:~/matebot$ python3 -m ensurepip [email protected]:~/matebot$ python3 -m pip install --user --upgrade pip pipenv [email protected]:~/matebot$ pipenv install

Outras formas

Quem não quiser usar pipenv pode usar virtualenvwrapper, virtualenv ou outro método de preferência se souber o que está fazendo. Um arquivo requirements.txt é mantido atualizado no repositório.

bash [email protected]:~/matebot$ python3 -m ensurepip [email protected]:~/matebot$ python3 -m pip install --user --upgrade pip [email protected]:~/matebot$ python3 -m pip install --user -r requirements.txt

TODO: Fazer instruções para usar sem pipenv


Configurando

Criar o diretório instance:

bash [email protected]:~/matebot$ mkdir instance

Renomear o arquivo doc/default_config.py para instance/config.py.

bash [email protected]:~/matebot$ cp doc/default_config.py instance/config.py

Editar o arquivo de configuração, pelo menos adicionando tokens para o valor obtido através do @BotFather.

A parte da configuração que é necessário alterar se parece com isto:

python 'matebot': { ## Obtenha um token com @BotFather no Telegram 'token': "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",

Onde 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 deve ser substituída com a token providenciada pelo BotFather.

Uma forma alternativa de alterar este campo é diretamente na linha de comando usando sed:

bash [email protected]:~/matebot$ TOKEN="654321:ZXC-VBN4321ghIkl-zyx57W2v1u123ew11"; sed -i 's/123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/'${TOKEN}'/g' instance/config.py

Alterar os demais campos de configuração de acordo com a necessidade, cada opção está comentada no arquivo de configuração de exemplo doc/default_config.py.

TODO: Documentar exemplos de uso do arquivo de configuração para um bot ou vários bots

Flask / Quart

Para usar a versão com Flask (ou Quart), é necessário também renomear o arquivo doc/default_env para .env. Ou criar um arquivo .env com as variáveis FLASK_APP e FLASK_ENV (ou QUART_APP / QUART_ENV).


Rodando

No diretório principal do matebot:

pipenv

Para rodar com pipenv, assumindo que a configuração já está correta:

bash [email protected]:~/matebot$ pipenv run matebot

Se tiver mais bots configurados, informar o nome da chave do token do arquivo de configuração:

bash [email protected]:~/matebot$ pipenv run matebot production

O método anterior para usar Flask e python-telegram-bot:

bash [email protected]:~/matebot$ pipenv run ptb

O método antigo pra usar telepot (não recomendado):

bash [email protected]:~/matebot$ pipenv run telepot

Outros métodos

Quem estiver usando outra coisa que não seja pipenv, pode usar o script app.py que vai tentar encontrar os módulos e arquivos de configuração pertinentes. Alguns exemplos:

bash [email protected]:~/matebot$ python3 start.py aiogram matebot

bat C:\Users\user\tg-matebot> Python start.py flask matebot

Para parar, enviar um sinal KeyboardInterrupt (CTRL+C).


Deploy / produção

Systemd

Exemplo de arquivo para usar com systemd:

```systemd [Unit] Description=MateBot daemon After=network.target nss-lookup.target

[Service] Type=simple ExecStart=/home/user/.local/bin/pipenv run matebot WorkingDirectory=/home/user/matebot/ Restart=on-failure

[Install] WantedBy=multi-user.target ```

Em um sistema Debian, este arquivo deveria estar em ${HOME}/.config/systemd/user/matebot.service.

Habilitando o serviço na inicialização do sistema e iniciando agora:

bash [email protected]:~$ systemctl --user daemon-reload [email protected]:~$ systemctl --user enable matebot.service [email protected]:~$ systemctl --user -l start matebot.service

Para ver se está funcionando:

bash [email protected]:~$ systemctl --user -l status matebot.service

Parar:

bash [email protected]:~$ systemctl --user stop matebot.service

Remover da inicialização:

bash [email protected]:~$ systemctl --user disable matebot.service

Reiniciar:

bash [email protected]:~$ systemctl --user -l restart matebot.service

Para o caso de usar systemd como root, o arquivo de configuração deve estar em /lib/systemd/system/matebot.service, e os comandos devem ser utilizados sem o --user, como por exemplo:

bash [email protected]:/root# systemctl -l restart matebot.service

Mas eu não recomendo esta abordagem.

Crontab

Também é possível usar cron para verificar se o bot está no ar periodicamente:

bash [email protected]:~$ crontab -e

Adicione uma linha como por exemplo esta na crontab:

crontab */10 * * * * /usr/lib/systemctl --user is-active matebot.service || /usr/lib/systemctl --user restart matebot.service

Isto vai verificar se o bot está no ar a cada 10 minutos, e reiniciar o serviço caso esteja fora do ar.

Docker

Adicione seu token em BOTFATHER_TOKEN no arquivo doc/default_env e depois rode os comandos abaixo na raiz do projeto

bash docker build -t matebot -f Dockfile . docker run -d --name matebot matebot docker inspect matebot | grep IPAddress

Após esses comandos você terá o IP do seu container pegue esse IP e acesse via CURL IP:5000

Heroku / Python Anywhere

Existem usuária(o)s do bot que usam Heroku e Python Anywhere solicitando ajuda para configurar o robô nestes serviços. Eu nunca usei nada disto então preciso de ajuda para tal feito.


Licença

Copyleft 2012-2020 Iuri Guilherme, 2017-2020 Matehackers, 2018-2019 Velivery, 2019 Greatful, 2019-2020 Fábrica do Futuro

Este programa é um software livre; você pode redistribuí-lo e/ou
modificá-lo sob os termos da Licença Pública Geral GNU como publicada
pela Free Software Foundation; na versão 3 da Licença, ou
(a seu critério) qualquer versão posterior.

Este programa é distribuído na esperança de que possa ser útil,
mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
Licença Pública Geral GNU para mais detalhes.

Você deve ter recebido uma cópia da Licença Pública Geral GNU junto
com este programa (veja o arquivo LICENSE.md).
Se não, veja http://www.gnu.org/licenses/.

Issues

Bump ujson from 4.0.2 to 5.1.0

opened on 2022-01-21 23:41:47 by dependabot[bot]

Bumps ujson from 4.0.2 to 5.1.0.

Release notes

Sourced from ujson's releases.

5.1.0

Changed

5.0.0

Added

Removed

Fixed

4.3.0

Added

4.2.0

Added

Changed

4.1.0

Added

Changed

... (truncated)

Commits
  • 682c660 Merge pull request #493 from bwoodsend/strip-binaries
  • c1d5b6d [pre-commit.ci] auto fixes from pre-commit.com hooks
  • b9275f7 Strip debugging symbols from Linux binaries.
  • e3ccc5a Merge pull request #492 from hugovk/deploy-twine
  • 243d49b Install Twine to upload to PyPI
  • 269621b Merge pull request #490 from hugovk/rm-3.6
  • cccde3f Drop support for EOL Python 3.6
  • b55049f Merge pull request #491 from bwoodsend/switch-to-ci-build-wheels
  • 04286a6 Drop wheels for Python 3.6. (#490)
  • ab32d48 CI/CD: Ensure that sdists are uploaded last.
  • Additional commits viewable in compare view


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/matehackers/matebot/network/alerts).

Bump urllib3 from 1.26.4 to 1.26.5

opened on 2021-06-02 02:58:17 by dependabot[bot]

Bumps urllib3 from 1.26.4 to 1.26.5.

Release notes

Sourced from urllib3's releases.

1.26.5

:warning: IMPORTANT: urllib3 v2.0 will drop support for Python 2: Read more in the v2.0 Roadmap

  • Fixed deprecation warnings emitted in Python 3.10.
  • Updated vendored six library to 1.16.0.
  • Improved performance of URL parser when splitting the authority component.

If you or your organization rely on urllib3 consider supporting us via GitHub Sponsors

Changelog

Sourced from urllib3's changelog.

1.26.5 (2021-05-26)

  • Fixed deprecation warnings emitted in Python 3.10.
  • Updated vendored six library to 1.16.0.
  • Improved performance of URL parser when splitting the authority component.
Commits
  • d161647 Release 1.26.5
  • 2d4a3fe Improve performance of sub-authority splitting in URL
  • 2698537 Update vendored six to 1.16.0
  • 07bed79 Fix deprecation warnings for Python 3.10 ssl module
  • d725a9b Add Python 3.10 to GitHub Actions
  • 339ad34 Use pytest==6.2.4 on Python 3.10+
  • f271c9c Apply latest Black formatting
  • 1884878 [1.26] Properly proxy EOF on the SSLTransport test suite
  • See full diff in compare view


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/matehackers/matebot/network/alerts).

[cryptoforex] /price quebra com símbolos em minúsculas

opened on 2021-05-04 22:31:17 by iuriguilherme

Além do fato do comando só funcionar com símbolos ser um bug digno de uma issue em separado, quando a gente manda por exemplo /price doge depois vai dar erro de chave porque no resultado do coinmarketcap o quote é DOGE (nome da chave do dicionário python).

Melhorar os logs para depuraç~~ao

opened on 2021-04-10 19:02:06 by iuriguilherme

https://www.youtube.com/watch?v=fMRzuwlqfzs&t=280s

Para evitar "mensagem muito longa" ´´e poss´´ivel separar em v´´arios grupos e referenciar com links, ou outro tipo de refer^^encia que seja f´´acil de navegar durante a depuraç~~ao.

[ideia] BOFH excuses

opened on 2021-03-22 14:25:07 by iuriguilherme

Eu acho que ainda escrevo melhor em Perl do que em Python, então essa é a hora de inverter esta afirmação.

[ytdl] Tamanho do arquivo

opened on 2020-10-25 16:18:26 by iuriguilherme

```

sendVideo #TelegramAPIError

"NetworkError('File too large for uploading. Check telegram api limits https://core.telegram.org/bots/api#senddocument')" ```

Foi tentando fazer download do vídeo do TextoTecidoTexto: https://www.youtube.com/watch?v=XphySid7iCg

Provável solução, detectar o tamanho do vídeo depois (ou antes?) do download e tentar reduzir a qualidade, ou então separar o arquivo em partes com o próprio ffmpeg.


PS: Fuck the RIAA

Releases

CryptoForexBot 2021-05-04 20:46:01

Alguns bugs de 1.6 e 1.7 resolvidos

Personalidade cryptoforex - antigo tg-cryptoforexbot reescrita (era a mãe da matebot!)

Bot de exemplo em https://t.me/cryptoforexbot

Na versão atual só funciona o comando /price

Por exemplo: /price ETH

Personalidades 2020-09-15 17:44:01

MateBot com personalidades!

Cada personalidade vai responder alguns comandos sobrescritos de uma forma diferente. Além dos recursos do Telegram (definir nome, fotografia e descrição), a linguagem da bot agora é mutável através da configuração bot.info['personalidade'] (no arquivo de configuração: config.default_bot['info']['personalidade'].

As personalidades disponíveis atualmente são:

default

Personalidade padrão que sempre foi das MateBot / Vegga / Gê

metarec

Personalidade atualmente tentando aprender usar pronome neutro

pave

Personalidade "humor boomer" saudável (Tiozão do Pavê)

pacume

Personalidade "humor boomer" ofensiva (inapropriada para publicação)

Matebot com Aiogram 2020-09-11 04:11:50

Versão usando aiogram e asyncio.

v0.1.5.0

Youtube Download

v0.1.4.1

Todos plugins antigos do telepot migrados para async

v0.1.3.3

Updates recebidas são enviadas para grupo de log, update é formatada com pretty print, markdown. Incluído #tags pra facilitar a busca e depuração além de link para update no caso de grupos e canais.

Flask e python-telegram-bot 2020-08-28 06:26:03

Última versão estável com Flask e python-telegram-bot

Nota: Nenhum plugin do Telepot foi migrado!

Flask e python-telegram-bot 2020-08-10 06:34:22

Bot deve estar funcionando com Flask e python-telegram-bot. Nenhum comando tratado, a única função implementada é enviar updates para um grupo.

Telepot 2020-01-18 00:44:20

Última versão estável com telepot

Hackerspace Matehackers

Hackerspace de Porto Alegre/RS

GitHub Repository Homepage

bot matehackers flask quart python-telegram-bot python python3 telegram telegram-bot telegram-bot-api telegram-bots telepot aiogram