web-dev-qa-db-fra.com

Envoi de messages avec Telegram - API ou CLI?

Je voudrais pouvoir envoyer un message à une discussion de groupe dans Telegram. Je veux exécuter un script python (qui rend certaines opérations qui fonctionnent déjà), puis, si certains paramètres ont des valeurs, le script doit envoyer un message à une discussion de groupe via Telegram. J'utilise Ubuntu et Python 2.7

Je pense, si je ne me trompe pas, que j'ai deux façons de procéder:

  • Première façon: connectez le script Python aux API Telegram directement et envoyez le message ( https://core.telegram.org/api ).

  • Deuxième méthode: faites en sorte que le script Python appelle la CLI du télégramme ( https://github.com/vysheng/tg ), transmettez quelques valeurs à ceci, puis le message est envoyé par la CLI du Telegram.

Je pense que la première façon est plus longue, donc une bonne idée pourrait être d'utiliser la deuxième voie.

Dans ce cas, je ne sais vraiment pas comment procéder. Je ne connais pas beaucoup les scripts sous Linux, mais j'ai essayé de faire ceci:

#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere" | ./telegram
sleep 10
echo "quit" | ./telegram

cela fonctionne à moitié: il envoie le message correctement, mais le processus reste ouvert. Et deuxième problème, je n'ai aucune idée de comment appeler cela depuis python et comment transmettre une valeur à ce script. La valeur que je voudrais transmettre au script est le "messageici") var: ce serait un message de 100/200 caractères, défini depuis l'intérieur du script python.

Quelqu'un a-t-il des indices à ce sujet? Merci pour les réponses, j'espère que cela pourrait être utile pour quelqu'un d'autre.

31
Michele

Créez d'abord un script bash pour le télégramme appelé tg.sh:

#!/bin/bash
now=$(date)
to=$1
subject=$2
body=$3
tgpath=/home/youruser/tg
LOGFILE="/home/youruser/tg.log"
cd ${tgpath}
${tgpath}/telegram -k ${tgpath}/tg-server.pub -W <<EOF
msg $to $subject
safe_quit
EOF
echo "$now Recipient=$to Message=$subject" >> ${LOGFILE}
echo "Finished" >> ${LOGFILE}

Ensuite, placez le script dans le même dossier que votre python, et donnez-lui l'autorisation + x avec chmod +x tg.sh

Et enfin depuis python, vous pouvez faire:

import subprocess
subprocess.call(["./tg.sh", "user#****", "message here"])
5
Guillermo Olmedo

Telegram a récemment publié son nouveau Bot API qui rend l'envoi/la réception de messages trivial. Je vous suggère également de jeter un coup d'œil à cela et de voir si cela correspond à vos besoins, il vaut mieux envelopper la bibliothèque cliente ou l'intégration avec leur API MTProto.

import urllib
import urllib2

# Generate a bot ID here: https://core.telegram.org/bots#botfather
bot_id = "{YOUR_BOT_ID}"

# Request latest messages
result = urllib2.urlopen("https://api.telegram.org/bot" + bot_id + "/getUpdates").read()
print result

# Send a message to a chat room (chat room ID retrieved from getUpdates)
result = urllib2.urlopen("https://api.telegram.org/bot" + bot_id + "/sendMessage", urllib.urlencode({ "chat_id": 0, "text": 'my message' })).read()
print result

Malheureusement, je n'ai vu aucune bibliothèque Python avec laquelle vous pouvez interagir directement, mais voici un équivalent NodeJS sur lequel j'ai travaillé pour référence.

30
Chris Brand

Depuis la version 1.05, vous pouvez utiliser l'option -P pour accepter les messages d'un socket, qui est une troisième option pour résoudre votre problème. Désolé que ce ne soit pas vraiment la réponse à votre question, mais je ne suis pas en mesure de commenter votre question car je n'ai pas assez de réputation.

10
nfgf

Je travaille avec pytg qui peut être trouvé ici: A Python qui enveloppe la CLI de Telegram messenger

ça marche plutôt bien. J'ai déjà un python bot basé sur ce projet

5
ShlomiK

Vous pouvez utiliser safe_quit pour mettre fin à la connexion à la place car il attend que tout soit fait avant de fermer la connexion et de mettre fin à l'application

#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere\nsafe_quit\n" | ./telegram

utilisez-le comme un simple script et appelez-le depuis le code python comme l'autre réponse l'a suggéré.

2
Fahad Alduraibi

Je recommanderais la première option.

Une fois que vous êtes à l'aise avec la génération d'une AuthKey , vous devriez commencer à vous familiariser avec la documentation.

Pour vous aider, j'ai écrit un guide détaillé étape par étape sur la façon dont j'ai écrit le code de génération AuthKey à partir de zéro ici .

C'est dans vb.net, mais les étapes devraient vous aider à faire de même en python.

0
Charles Okwuagwu