Search code examples
pythonlinuxshellpython-2.7telegram

Sending messages with Telegram - APIs or CLI?


I would like to be able to send a message to a group chat in Telegram. I want to run a python script (which makes some operations that already works) and then, if some parameters have some values the script should send a message to a group chat through Telegram. I am using Ubuntu, and Python 2.7

I think, if I am not wrong, that I have two ways to do that:

  • Way One: make the Python script connect to the Telegram APIs directly and send the message (https://core.telegram.org/api).

  • Way Two: make the Python script call the Telegram's CLI (https://github.com/vysheng/tg), pass some values to this and then the message is sent by the Telegram's CLI.

I think that the first way is longer, so a good idea might be using the Way Two.

In this case I really don't know how to proceed. I don't know lots about scripts in linux, but I tried to do this:

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

this works at a half: it sends the message correctly, but then the process remains open. And second problem, I have no clue on how to call that from python and how to pass some value to this script. The value that I would like to pass to the script is the "messagehere" var: this would be a 100/200 characters message, defined from inside the python script.

Does anyone has any clues on that? Thanks for replies, I hope this might be useful for someone else.


Solution

  • First create a bash script for telegram called 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}
    

    Then put the script in the same folder than your python script, and give it +x permission with chmod +x tg.sh

    And finally from python, you can do:

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