身為一個工科的研究生,你是否也有以下的困擾:

"總是搶不到實驗室機器"、"擔心這個禮拜的實驗做得不夠多"、"睡前忘記收數據,導致下的實驗比別人少?"

沒問題,你遇到的情況我通通都有遇過!

筆者本人是心血來潮就會從臺中出發去花東吃早餐的放浪少年(#。

但是週六日還要下實驗,那該怎麼辦?

近期又要面臨暑期工作壓力,實驗進度更是要顧,

所以產出了這篇文章。

這篇文章能幫助你什麼?

在 Python 程式跑完的時候,發 Telegram 訊息通知你。

OK,讓我們開始吧。

首先先安裝一下本文所使用的套件:

pip3 install telegram
pip3 install python-telegram-bot

移到你目前想提醒 Python 程式的目錄底下

cd ~/your_Python_program

 

建立 Telegram 機器人的主程式(或是從這裡下載我寫好的)

touch TelegramBot.py

寫檔,接著複製貼上就可以了。

vim TelegramBot.py
import os
import sys
import re
import configparser
import telegram.ext
import requests
import time


import logging

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# Enable logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)

logger = logging.getLogger(__name__)
# Initial bot by Telegram access token

config = configparser.ConfigParser()
config.read('config.ini')


def start(update, context):
    """Send a message when the command /start is issued."""
    update.message.reply_text('Hi!')

def echo(update, context):
    """Echo the user message."""
    update.message.reply_text(update.message.text)

def help(update, context):
    """Send a message when the command /help is issued."""
    update.message.reply_text('Help!')

def getUID(update, context):
    update.message.reply_text(update['message']['chat']['id'])
    print(update['message']['chat']['id'])

def Alert():
    TOKEN = config.get('Bot','ACCESS_TOKEN')
    UID = config.get('Bot','UID')
    updater = Updater(token=TOKEN, use_context=True)
    dp = updater.dispatcher
    text ='實驗跑完啦!快上來收數據!'
    dp.bot.send_message(chat_id=UID, text=text) # 發送訊息


def error(update, context):
    """Log Errors caused by Updates."""
    logger.warning('Update "%s" caused error "%s"', update, context.error)

def main():
    
    TOKEN = config.get('Bot','ACCESS_TOKEN')
    UID = config.get('Bot','UID')
    updater = Updater(token=TOKEN, use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("help", help))
    dp.add_handler(CommandHandler("Alert", Alert))
    dp.add_handler(CommandHandler("getUID", getUID))
    dp.add_handler(MessageHandler(Filters.text, echo))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
(然後向 BotFather 申請自己的機器人並拿到 Token,這部分可以看別的大大寫的這篇。)
在同目錄底下建立 config.ini

touch config.ini
寫 config.ini
vim config.ini

把 your_token 換成你剛剛拿到的 TOKEN,
UID 待會再教你拿:

[Bot]
ACCESS_TOKEN = your_token
UID = your_uid

 

填完之後,好沒問題來!
我們來拿 UID!
把這支程式跑起來:

python TelegramBot
如果一切沒問題,你的終端機會顯示:
apscheduler.scheduler – INFO – Scheduler started
再開 Telegram 到你與這隻機器人的對話框,輸入:

/getUID

這樣在 Telegram 對話框 及 終端機應該都會把你的 UID 噴出來,

把 UID 回填到 config.ini 裡面去。
然後把這支程式關掉(Ctrl-C)
在你想監聽的 Python 程式最上面加入:

from TelegramBot import Alert
程式執行完處加入:

Alert()
把機器人跑起來,把你想監聽的程式也跑起來。
當程式執行完時便會出現:

已解決!

By wuyiulin

喜歡騎單車的影像算法工程師

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *