Telegram 憑證監控機器人實作 EP2 - 打造自己的 TG Bot

閱讀時間約 10 分鐘
raw-image

👨‍💻 簡介

今天這篇主要是帶大家快速建立屬於自己的 Telegram bot,申請 bot 的部分我會附上網址,主要完成一些跟 Bot 的簡單回覆以及設定指令等等功能。

🛠️ 使用工具

📝 功能需求

  • 輸入指令讓 TG Bot 回傳訊息
  • 接受傳入參數並進行簡單回傳
  • 設定 cronjob,固定時間回傳訊息

🎯Setup

要使用 TG Bot,可以使用 pyTelegramBotAPI 這個 Library,官網有簡單的範例可以讓我們快速上手。

  1. 輸入指令讓 TG Bot 回傳訊息

這個簡單的範例可以在你輸入 hello 時,做簡單的回傳:

import telebot

TOKEN = "your-token"

# 建立機器人
bot = telebot.TeleBot(TOKEN)

# 設定一個指令處理器,當收到指令 /hello 時觸發。
@bot.message_handler(commands=['hello'])
def hello_command(message):
# 發送一條消息到發送 /hello 指令的聊天中
bot.send_message(message, "Someone has started me!")

# 讓機器人不斷運行,等待並處理任何消息或指令。
bot.infinity_polling()

要建立指令都會需要設定 message_handler,並且需要傳入 message 參數。 這個參數代表了觸發該指令的 Telegram 消息對象,透過這個 message 對象,你可以訪問到發送指令的用戶資訊、消息內容、聊天資訊等重要資料。

底下這段程式碼印出了一些常用的資訊:

from datetime import datetime
import telebot

TOKEN = "your-bot-token"
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['hello'])
def handle_hello(message):
# 初始化一個列表來保存消息的屬性資訊
info = []

# 添加基本訊息
info.append(f"訊息ID:{message.message_id}")
timestamp = datetime.fromtimestamp(message.date)
formatted_time = timestamp.strftime('%Y-%m-%d %H:%M:%S')
info.append(f"發送日期和時間:{formatted_time}")

# 檢查並添加用戶訊息
if message.from_user:
user_info = f"發送者:{message.from_user.first_name}"
if hasattr(message.from_user, 'username'):
user_info += f" (@{message.from_user.username})"
info.append(user_info)

# 檢查並添加聊天訊息
if message.chat:
chat_type = "個人聊天" if message.chat.type == "private" else "群聊"
info.append(f"聊天類型:{chat_type}")
if hasattr(message.chat, 'title'):
info.append(f"聊天標題:{message.chat.title}")

# 添加文本內容
text_content = message.text or "無文本內容"
info.append(f"訊息內容:{text_content}")

# 將訊息列表合併成一個字符串
info_str = "\n".join(info)

# 發送訊息
bot.reply_to(message, info_str)

bot.infinity_polling()

send_message 的語法如下:

bot.send_message(chat_id, text, parse_mode=None, ...)
  • chat_id:這是必須提供的參數,表示消息將被發送到的聊天的唯一標識符。每個 Telegram 聊天(無論是私聊還是群聊)都有一個唯一的 id,這個 id 可以用於指定消息的接收方。
  • text:這是你想要發送的消息文本。
  • parse_mode(可選):這個參數可以用來指定消息文本的解析模式,例如,可以設置為 MarkdownHTML 以支持不同的文本格式化選項。

這樣就算是簡單的完成機器人的接收指令了。

2. 接受傳入參數並進行簡單回傳

接下來試著讓它接受參數並在指定的群組做回傳

import telebot

TOKEN = "your-bot-token"
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['hello'])
def hello_command(message):
name = message.text.split()[1] if len(message.text.split()) > 1 else "there"
bot.send_message(message.chat.id, f"Greetings {name}! I have notified the group.")

bot.infinity_polling()

這樣就可以在對話框輸入 /hello world ,參數就會被帶入到訊息裡了。

3. 設定 cronjob,固定時間回傳訊息

這裡使用scheduleLibrary,照著官方文檔設定:

import telebot
import schedule
import time

TOKEN = "your-bot-token"
bot = telebot.TeleBot(TOKEN)

TARGET_GROUP_CHAT_ID = "your-chat-id"

def send_message_to_group():
message = "大家好!" # 你想發送的消息
bot.send_message(TARGET_GROUP_CHAT_ID, message)

# 安排任務每天9點執行
schedule.every().day.at("09:00").do(send_message_to_group)
while True:
schedule.run_pending()
time.sleep(1) # 暫停一秒再檢查

這裡我使用的範例為發送訊息到特定群組,而不是接收指令。

schedule.do(job) 的語法如下:

schedule.every(10).seconds.do(function_name, function_params...)

第一個參數是你想要定時執行的函數的名稱,後面跟著的都是這個函數所需要的參數。

簡單的範例如下:

import schedule
import time

def greet(name, message):
print(f"Hi {name}, {message}")

# 安排每10秒執行一次greet函數,並傳遞兩個參數:'World' 和 'how are you today?'
schedule.every(10).seconds.do(greet, name="World", message="how are you today?")

while True:
schedule.run_pending() # 檢查並執行計劃中的任務
time.sleep(1)

這裡注意一下 while 迴圈裡的程式碼片段, schedule.run_pending() 這個方法是會去檢查是否有排程中的任務時間到了需要執行,這裡可以依照需求下去調整 sleep 的檢查間隔。

scheduler 語法如下:

# 每天的特定時間執行
schedule.every().day.at("10:30").do(job)

# 每小時執行
schedule.every().hour.do(job)

# 每10分鐘執行
schedule.every(10).minutes.do(job)

# 每周一的特定時間執行
schedule.every().monday.at("10:30").do(job)

# 每隔5秒鐘執行
schedule.every(5).seconds.do(job)

以上就是這次的設定過程,下一篇會來設定如何透過 TG Bot 接收指令查詢域名以及新增域名。

如果想看完整程式碼可以參考這裡 🔗 專案 repo –> ep2-telegram-bot

📚Reference

17會員
83內容數
golang
留言0
查看全部
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
👨‍💻簡介 在當今的雲計算時代,容器化和微服務架構成為了重要趨勢。Kubernetes,作為領先的容器編排平台,提供了強大的功能來管理和部署應用程式。然而,隨著應用程式和用戶的增加,有效管理誰可以對 Kubernetes 集群執行何種操作變得至關重要。
👨‍💻簡介 terraform在每次執行terraform plan或terraform apply時,是如何知道應該要管理哪些資源? 其實就是透過在每次執行terraform時,將建立或要變更的資源都記錄在terraform.state這份狀態檔,預設檔案使用JSON格式。
📔心得 最近,我在探索 Ansible 自動化工具的過程中,決定運用它來建立 ELK Stack,這是我之前使用 Docker 建立的經驗的延伸。在這個過程中,我想分享一下我的學習心得。
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
👨‍💻簡介 在當今的雲計算時代,容器化和微服務架構成為了重要趨勢。Kubernetes,作為領先的容器編排平台,提供了強大的功能來管理和部署應用程式。然而,隨著應用程式和用戶的增加,有效管理誰可以對 Kubernetes 集群執行何種操作變得至關重要。
👨‍💻簡介 terraform在每次執行terraform plan或terraform apply時,是如何知道應該要管理哪些資源? 其實就是透過在每次執行terraform時,將建立或要變更的資源都記錄在terraform.state這份狀態檔,預設檔案使用JSON格式。
📔心得 最近,我在探索 Ansible 自動化工具的過程中,決定運用它來建立 ELK Stack,這是我之前使用 Docker 建立的經驗的延伸。在這個過程中,我想分享一下我的學習心得。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
在最近的一系列訪談中,Telegram創始人Pavel Durov揭露了他在保護用戶隱私與安全方面所面臨的巨大壓力,這些壓力來自美國政府和科技巨頭。在與Tucker Carlson等媒體採訪中,他詳細描述了FBI訪問他家、派遣特工施壓他和團隊以及試圖向他的員工行賄的經歷。
Thumbnail
Telegram是全球極為注重隱私且功能優越的通訊應用程式,深受眾多商業從業者的喜愛。擁有越多的訂閱粉絲,相當於為你開創更多的業績和收入機會。你可以考慮採用一種更迅速的方式,就是Telegram頻道買粉絲,以加速頻道的成長與發展。
Thumbnail
本篇方法為使用網頁工具製作動態貼圖, 相較於下方的方式,也可使用Canva製作符合尺寸的3秒GIF動畫,並轉檔為Webm檔,即可上傳Telegram使用。
Thumbnail
Telegram的貼圖,可透過Line貼圖商店,複製貼圖網址後貼於TG機器人moe_stickers_bot即可,無論是靜態貼圖、動態貼圖皆可。
Thumbnail
本篇章講述的是透過Photoshop製作逐格動畫來製作動態貼圖,只是此製作方式所製作的貼圖缺點為若使用的張數若不夠多,動作較容易卡頓,如需製作更為順暢的動態貼圖,可利用其他工具製作三秒的GIF短影片,即可上傳製作成功更加順暢的動態貼圖。
Thumbnail
本篇為製作靜態Telegram貼圖,示範的為利用Illustrator製作貼圖之後,上傳至Telegram機器人,製作貼圖。
Thumbnail
相較於Line,雖然普及到所有年齡層幾乎都有使用,雖然交流便利,但也有不少限制其實非常不便。尤其對於檔案傳輸限制與檔案過期更是讓人懊惱。在Telegram,因著檔案不會過期以及檔案傳輸方便的這項特性,對於數位創作者來說,就是個非常大的福音!
Thumbnail
線上祈禱 + 抽牌分享! 線上禱告+抽牌分享!( 可以 祈禱基督✨、向天使請求✨) https://t.me/star_yuki1657 大家可以一起集氣(正能量), 冥想祈禱、抽牌分享祝福! * 這個頻道不分宗教類別,任何人皆可冥想祈禱、分享祝福!
Thumbnail
「更長的電報」是昧於中國強大崛起的真相,才制訂出的空泛教戰守則。而搞倒「他國領導人」的策略更幼稚到鼓勵媒體造謠抹黑的烏賊戰。拜登對習近平品頭論足的人身言論,多少受其影響。而較溫和「克制派」則考慮廢除或修訂「台灣關係法」或賣武器,武裝臺灣。
Thumbnail
歡迎大家加入交流喔! https://t.me/joinchat/Vfa3-B1A_Qjl-DYgyvNuIg?fbclid=IwAR2N6k9lE0HGQ3i4i3yf64qEmprsVXfrGqdTARJLv6HW-BBwLj9v8PjFSr8
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
在最近的一系列訪談中,Telegram創始人Pavel Durov揭露了他在保護用戶隱私與安全方面所面臨的巨大壓力,這些壓力來自美國政府和科技巨頭。在與Tucker Carlson等媒體採訪中,他詳細描述了FBI訪問他家、派遣特工施壓他和團隊以及試圖向他的員工行賄的經歷。
Thumbnail
Telegram是全球極為注重隱私且功能優越的通訊應用程式,深受眾多商業從業者的喜愛。擁有越多的訂閱粉絲,相當於為你開創更多的業績和收入機會。你可以考慮採用一種更迅速的方式,就是Telegram頻道買粉絲,以加速頻道的成長與發展。
Thumbnail
本篇方法為使用網頁工具製作動態貼圖, 相較於下方的方式,也可使用Canva製作符合尺寸的3秒GIF動畫,並轉檔為Webm檔,即可上傳Telegram使用。
Thumbnail
Telegram的貼圖,可透過Line貼圖商店,複製貼圖網址後貼於TG機器人moe_stickers_bot即可,無論是靜態貼圖、動態貼圖皆可。
Thumbnail
本篇章講述的是透過Photoshop製作逐格動畫來製作動態貼圖,只是此製作方式所製作的貼圖缺點為若使用的張數若不夠多,動作較容易卡頓,如需製作更為順暢的動態貼圖,可利用其他工具製作三秒的GIF短影片,即可上傳製作成功更加順暢的動態貼圖。
Thumbnail
本篇為製作靜態Telegram貼圖,示範的為利用Illustrator製作貼圖之後,上傳至Telegram機器人,製作貼圖。
Thumbnail
相較於Line,雖然普及到所有年齡層幾乎都有使用,雖然交流便利,但也有不少限制其實非常不便。尤其對於檔案傳輸限制與檔案過期更是讓人懊惱。在Telegram,因著檔案不會過期以及檔案傳輸方便的這項特性,對於數位創作者來說,就是個非常大的福音!
Thumbnail
線上祈禱 + 抽牌分享! 線上禱告+抽牌分享!( 可以 祈禱基督✨、向天使請求✨) https://t.me/star_yuki1657 大家可以一起集氣(正能量), 冥想祈禱、抽牌分享祝福! * 這個頻道不分宗教類別,任何人皆可冥想祈禱、分享祝福!
Thumbnail
「更長的電報」是昧於中國強大崛起的真相,才制訂出的空泛教戰守則。而搞倒「他國領導人」的策略更幼稚到鼓勵媒體造謠抹黑的烏賊戰。拜登對習近平品頭論足的人身言論,多少受其影響。而較溫和「克制派」則考慮廢除或修訂「台灣關係法」或賣武器,武裝臺灣。
Thumbnail
歡迎大家加入交流喔! https://t.me/joinchat/Vfa3-B1A_Qjl-DYgyvNuIg?fbclid=IwAR2N6k9lE0HGQ3i4i3yf64qEmprsVXfrGqdTARJLv6HW-BBwLj9v8PjFSr8