Um bot do telegram para dividir sabedoria com o mundo! Para ver os resultados, basta acessar meu canal do Telegram, o site oficial ou meu canal no Youtube.
- Projeto completo! 🎉🎉🎉
- 1140 frases para você usar onde quiser (e mais algumas quando eu tiver vontade).
- Gerar captions com base em imagem e frases escolhidas aleatoriamente a partir de base de dados.
- Mecanismo para adicionar frases na base de dados a partir da linha de comando.
- Opção para pesquisar na base de dados a partir da linha de comando por frases de um autor
- Opção para pesquisar na base de dados a partir da linha de comando por frases com determinada string.
- Opção para pesquisar na base de dados a partir da linha de comando por frases de um autor com determinada string.
- Gerar caption a partir de imagem, frase e autor especificados na linha de comando
- Opção para verificar estatísticas básicas sobre a base de dados.
- Watermark.
- Novas fontes de letra.
- Extrair estatísticas de visualização diretamente do Telegram
- Agendar envio de mensagens automaticamente.
- Translate code and README to english.
- Inserir todas as frases sábias escritas pela raça humana.
- Inserir todas as frases sábias escritas pelos golfinhos.
O script utiliza uma base de dados chamada citacoes.db, a qual pode ser criada conforme abaixo:
import sqlite3
con = sqlite3.connect('citacoes.db');
cur = con.cursor();
cur.execute("CREATE TABLE images (ultima int, image text, red integer, green integer, blue integer, link text)");
cur.execute("CREATE TABLE "citacoes" (autor text, frase text, enviar int)");
con.commit()As citações que eu utilizei estão disponíves aqui. Uma lista das imagens está disponível aqui, destaco, porém, que eu não sou proprietário dessas imagens, sendo todas disponibilizadas a partir do unsplash.
O código é bem simples, temos três funções: main, quebra_lista_alt, fazedor_de_imagem.
É a responsável por selecionar a frase, a imagem e enviar para o Telegram.
O código abaixo é usado para selecionar a frase, perceba que o campo "enviar" é utilizado como um marcador, para evitar que uma frase já enviada seja enviada novamente. "Mas por que não excluir da BD?", eu preetendo reutilizar algumas frases à medida que eu for adicionando novas imagens.
# Selecionando a frase
rowid, autor, frase = cur.execute(f"select rowid, autor, frase from citacoes where enviar = 0 ORDER BY RANDOM() LIMIT 1;").fetchall()[0];
cur.execute(f"update citacoes set enviar=1 where rowid = {rowid};");
con.commit();Abaixo, a seleção da frase, mas com o foco de evitar apenas que a mesma imagem seja enviado duas vezes seguidas:
imagem, red, green, blue, link = cur.execute(f"SELECT image, red, green, blue, link FROM images WHERE ultima=0 ORDER BY RANDOM() LIMIT 1;").fetchall()[0];
cur.execute(f"update images set ultima=0 where ultima=1;");
cur.execute(f"update images set ultima=1 where image = '{imagem}';");
con.commit();
color = (red, green, blue);"Mas por que você não usou uma API de imagem como...", de fato, eu pensei em usar APIs do tipo como a loremflickr e a Lorem Picsum, o problema é que, como as imagens são aleatórias, há o risco de as palavras terem a mesma cor que o fundo da imagem, tornando a caption ilegível. Eu até considerei editar a imagem com um quadrado monocromático e escrever dentro dele, mas os resultados não me agradaram. No momento, o uso de APIs de imagem continua uma meta de desenvolvimento futuro.
O envio da imagem é feito por uma função assíncrona improvisada, o link é só uma forma de agradecer a Unsplash pelas imagens gratuitas:
async def enviando_mensagem():
await client.send_file('me',"temp.jpg",caption=f"[Foto original]({link})");
with client:
client.loop.run_until_complete(enviando_mensagem());É a função responsável por escrever a frase selecionada na imagem. Por padrão, a frase é escrita a partir do meio da imagem, utilizando a quebra_lista_alt para quebrar a frase em diferentes linhas (evitando que a frase saia da imagem). No futuro, pretendo adicionar uma variável "offset" com o objetivo de controlar o ponto de início da frase.
Para ver as opções disponíveis, basta acessar a opção "-h"
>python bot.py -h
usage: bot.py [-h] [--autor AUTOR] [--frase FRASE] [--inserir] [--delete DELETE] [--stats] [--teste]
Um bot para gerar imagens e postar no Telegram automaticamente.
options:
-h, --help show this help message and exit
--autor AUTOR Pesquisar citações de um dado autor.
--frase FRASE Pesquisar citações que contenham o termo inserido.
--inserir Inserir MANUALMENTE novas frases
--delete DELETE Deletar frase com base no rowid
--stats Gera relatório sobre as informações na base de dados
--teste Gera caption com imagem específica para testeEssa opção permite visualizar todas as frases escritas pelos autores cujo autor se encaixe no padrão especificado. É interessante notar que a entrada é usada para pesquisar no SQL, ou seja, você pode utilizar o "%" para verificar todos os autores dentro daquele padrão.
>python bot.py --autor "Oscar%"
autor: Oscar%
rowid | autor | frase
------------------------------------------------------------------------------------
232 | Oscar Wilde | Os loucos às vezes se curam, os imbecis nunca.
------------------------------------------------------------------------------------Similar à opção "autor" porém procura por frases contendo a string. Pode ser utilizada em combinação ou separado da função a cima para pesquisar por frases:
>python bot.py --autor "Fried%" --frase "%macaco%"
autor: Fried%
frase: %macaco%
rowid | autor | frase
------------------------------------------------------------------------------------
125 | Friedrich Nietzsche | O macaco é um animal demasiado simpático para que o homem descenda dele.
------------------------------------------------------------------------------------Usada para inserir frases novas na base de dados e no arquivo json (o qual é usado para exportar as frases para o Github). Após apertar ENTER será exibido um prompt com as strings inseridas. Use a oportunidade para garantir que digitou corretamente e digite "n" caso tenha notado algum erro ou "y" caso tudo certo.
>python bot.py --inserir --autor "Terry Pratchett" --frase "A inteligência de uma criatura conhecida como multidão é a raiz quadrada do número de pessoas dentro dela."
-----------------
autor: Terry Pratchett
frase: A inteligência de uma criatura conhecida como multidão é a raiz quadrada do número de pessoas dentro dela.
-----------------
Posso inserir (y/n)? y
Citações: 299Usada para deletar frases com base no id:
>python bot.py --delete 299
-----------------
rowid: 299
autor: Terry Pratchett
frase: A inteligência de uma criatura conhecida como multidão é a raiz quadrada do número de pessoas dentro dela.
Deletar?(y/n) yFornece estatísticas básicas sobre a base de dados, incluindo número de total de frases, número de frases a ser enviado, número de frases para enviar, autores, dentre outras:
>python bot.py --stats
GERANDO RELATÓRIO. AGUARDE UM POUCO.
========================================================
+------------------------------+------------+
| TOTAL DE FRASES | 300 |
| TOTAL DE FRASES ENVIADAS | 16 |
| TOTAL DE FRASES NÃO ENVIADAS | 284 |
+------------------------------+------------+
+-------------------------+------------+
| Abraham Lincoln | 1 |
| Agatha Christie | 3 |
| Albert Einstein | 8 |
| Andrew Carnegie | 1 |
...
| William Blake | 1 |
| William Shakespeare | 16 |
| Zenão de Cítio, pensador grego | 2 |
+-------------------------+------------+
========================================================Adiciona watermark à imagem especificada na linha de comando.
>python bot.py --watermark "path_para_sua_imagem\imagem_alvo.jpg"| Autor | Total de Frases |
|---|---|
| Machado de Assis | 44 |
| Mark Twain | 42 |
| Abraham Lincoln | 36 |
| Stephen King | 31 |
| Ruy Barbosa | 30 |
| Jean-Jacques Rousseau | 27 |
| Robert Frost | 18 |
| Helen Keller | 17 |
| Marco Aurélio | 17 |
| Provérbio Chinês | 17 |
| William Shakespeare | 17 |
| Douglas Adams | 16 |
| Martin Luther King Jr. | 16 |
| Mahatma Gandhi | 15 |
| Benjamin Franklin | 15 |
| Oscar Wilde | 15 |
| Stephen Hawking | 14 |
| Confúcio | 13 |
| John Lock | 13 |
| Fernando Pessoa | 12 |
| Winston Churchill | 12 |
| Sun Tzu | 12 |
| Voltaire | 12 |
| Jean-Paul Sartre | 12 |
| Adam Smith | 11 |
| Ayn Rand | 11 |
| Pitágoras | 11 |
| Charles Chaplin | 11 |
| Simone de Beauvoir | 11 |
| Erasmo de Roterdã | 11 |
| Albert Einstein | 10 |
| Florence Nightingale | 10 |
| Franklin D. Roosevelt | 10 |
| Nicolau Maquiavel | 10 |
| Pablo Neruda | 10 |
| Sêneca | 10 |
| Clarice Lispector | 9 |
| Immanuel Kant | 9 |
| Thomas Hobbes | 9 |
| Franz Kafka | 8 |
| T. S. Eliot | 8 |
| Charles Bukowski | 7 |
| Graciliano Ramos | 7 |
| Milton Santos | 7 |
| René Descartes | 7 |
| Carl Sagan | 6 |
| Karl Marx | 6 |
| Marie Curie | 6 |
| Dito Popular | 6 |
| Friedrich Nietzsche | 6 |
| Renato Russo | 6 |
| Simone Weil | 6 |
| Edmund Burke | 6 |
| Harvey Specter | 6 |
| Henry Ford | 5 |
| Malcolm X | 5 |
| Jean-Jacques Russeu | 5 |
| Neil deGrasse Tyson | 5 |
| Buda | 4 |
| Júlio Verne | 4 |
| Kurt Vonnegut | 4 |
| São Tomás de Aquino | 4 |
| Steve Jobs | 4 |
| Terry Pratchett | 4 |
| Rachel de Queiroz | 4 |
| Robin Williams | 4 |
| Tommas Shelby | 4 |
| Lao-Tsé | 4 |
| Otto von Bismarck | 4 |
| Agatha Christie | 3 |
| Aristóteles | 3 |
| Peter Drucker | 3 |
| Carl Sewell | 3 |
| Stan Lee | 3 |
| Richard Adams | 3 |
| Nikola Tesla | 3 |
| Claus Moller | 3 |
| Malala Yousafzai | 3 |
| Dalai Lama | 2 |
| Elbert Hubbard | 2 |
| Samuel Johnson | 2 |
| Eleanor Roosvelt | 2 |
| Mozi | 2 |
| Dito Popular Brasileiro | 2 |
| Carl Sandburg | 2 |
| Walt Disney | 2 |
| Zenão de Cítio, pensador grego | 2 |
| Provérbio italiano | 2 |
| Protágoras de Abdera | 2 |
| Provérbio Alemão | 2 |
| Will Rogers | 2 |
| Will Smith | 2 |
| John F. Kennedy | 2 |
| John Nash | 2 |
| Michael Jordan | 2 |
| Aldous Huxley | 1 |
| Alexander G. Bell | 1 |
| Alexander Soljenitsyn | 1 |
| Alfred Tennyson | 1 |
| Alvin Toffler | 1 |
| Amelia Earhart | 1 |
| Anatole France | 1 |
| Anderson Silva | 1 |
| Andrew Carnegie | 1 |
| André Gide | 1 |
| Anne Frank | 1 |
| Antoine de Saint | 1 |
| Ashton Kutcher | 1 |
| Audrey Hepburn | 1 |
| Ayn Randy | 1 |
| Babe Ruth | 1 |
| Barrie Hopson | 1 |
| Bertrand Russell | 1 |
| Beverly Sills | 1 |
| Bill Gates | 1 |
| Bob Esponja | 1 |
| Bob Marley | 1 |
| Booker T. Washington | 1 |
| Carmen Miranda | 1 |
| Catherine Romano | 1 |
| Cesare Cant | 1 |
| Charles Brower | 1 |
| Charles Dickens | 1 |
| Charles Swindoll | 1 |
| Churton Collin | 1 |
| Coco Chanel | 1 |
| Constantino C. Vigil | 1 |
| Cotton | 1 |
| Célia Chaim | 1 |
| Dave Lewis | 1 |
| Dave Weinbaum | 1 |
| Dean Rusk | 1 |
| Denis Waitley | 1 |
| Denis Walker | 1 |
| Diógenes Laércio | 1 |
| Dom Resende Costa | 1 |
| Doutor Seuss | 1 |
| Duke Ellington | 1 |
| Earle Wilson | 1 |
| Elmer Letterman | 1 |
| Enzo Ferrari | 1 |
| Ernest Hemingway | 1 |
| Eugène Ionesco | 1 |
| Eugéne Ionesco | 1 |
| Fiódor Dostoiévski | 1 |
| Forrest Gump | 1 |
| François La Rochefoucauld | 1 |
| Georg Wilhelm | 1 |
| George Eliot | 1 |
| George Gurdjieff | 1 |
| George Lichtenberg | 1 |
| George Lucas | 1 |
| George Santayana | 1 |
| George Savile | 1 |
| George Washington | 1 |
| Geraldo Vandré | 1 |
| Gloria Steinem | 1 |
| H. Jackson Brown Jr. | 1 |
| H. Ross Perot | 1 |
| Harols Abbott | 1 |
| Henri Barbusse | 1 |
| Henry D. Thoreau | 1 |
| Horácio | 1 |
| Hugh Prather | 1 |
| J. P. L. Affonso | 1 |
| J. Walters | 1 |
| Jacques Prévert | 1 |
| Jan Carlzon | 1 |
| Jean Paul Sartre | 1 |
| Joel L. Griffith | 1 |
| Joel Osteen | 1 |
| John S. Mill | 1 |
| John Sewell | 1 |
| John Tschohl | 1 |
| John Wayne | 1 |
| John Young | 1 |
| João Guimar | 1 |
| Karl Albrecht | 1 |
| Ken O | 1 |
| Kevin Kruse | 1 |
| Lao Tsu | 1 |
| Lao Tzu | 1 |
| Lao-Tze | 1 |
| Larry Wilson | 1 |
| Laurence J. Peter | 1 |
| Lecouve | 1 |
| Leonard Berry | 1 |
| Lord Chesterfield | 1 |
| Louis Pasteur | 1 |
| Louisa M. Alcott | 1 |
| M. J. Babcock | 1 |
| Malcolm Forbes | 1 |
| Marabel Morgan | 1 |
| Mario Andretti | 1 |
| Mark van Doren | 1 |
| Marry W. Shelley | 1 |
| Masaaki Imai | 1 |
| Michael de Montaigne | 1 |
| Moliere | 1 |
| N. V. Peale | 1 |
| Neil Armstrong | 1 |
| Nelson Mandel | 1 |
| Norman Bawes | 1 |
| Norman V. Peale | 1 |
| Norman Vaughan | 1 |
| Norman Vincent Peale | 1 |
| Oliver W. Holmes | 1 |
| Omar Khayyam | 1 |
| Onassis | 1 |
| Oprah Winfrey | 1 |
| Orison S. Marden | 1 |
| Orson Welles | 1 |
| Paul Deschanel | 1 |
| Paulo Freire | 1 |
| Peter Ducker | 1 |
| Peter Schutz | 1 |
| Phill Knight | 1 |
| Abbie Hoffman | 1 |
| Platão | 1 |
| Provérbio Chin | 1 |
| Provérbio Estadunidense | 1 |
| Provérbio Galês | 1 |
| Provérbio Islandês | 1 |
| Provérbio Japonês | 1 |
| Provérbio Latino | 1 |
| Provérbio Oriental | 1 |
| Provérbio Persa | 1 |
| Provérbio espanhol | 1 |
| Provérbio grego | 1 |
| Provérbio romano | 1 |
| R. Buckminster Fuller | 1 |
| Ralph W. Emerson | 1 |
| Reinaldo Polito | 1 |
| Richard Whiteley | 1 |
| Robert Frost (adaptado) | 1 |
| Robert H. Schuller | 1 |
| Robert Peterson | 1 |
| Ron Bern | 1 |
| Ronald Osborn | 1 |
| Roy L. Smith | 1 |
| Sam Walton | 1 |
| Samuel Beckett | 1 |
| Samuel Smiles | 1 |
| Santo Agostinho | 1 |
| Segundo Mandamento da TAM | 1 |
| Sholom Aleichem | 1 |
| Simone de Beauvoi | 1 |
| Soren Kierkegaard | 1 |
| Stephen Covey | 1 |
| Stubby Currence | 1 |
| Sérgio Almeida | 1 |
| Sétimo Mandamento da TAM | 1 |
| Sócrates | 1 |
| Sófocles | 1 |
| T.S. Eliot | 1 |
| Theodore Roosvelt | 1 |
| Thomas Carlyle | 1 |
| Vincent Van Gogh | 1 |
| W. F. Grenfel | 1 |
| W. S. Landor | 1 |
| Walter Gagehot | 1 |
| Walter Reuther | 1 |
| Warren Buffet | 1 |
| Warren Buffett | 1 |
| William Blake | 1 |
| William McKnight | 1 |
| xkcd | 1 |
| Abigail Van Buren | 1 |
- Unsplash - Fotos gratuitas para todos os usos.
- Matheus Guerra - 366 frases perfeitas!
- Lonami - criador do projeto Telethon
- Pensador - Frases inspiradoras para todos os gostos!
