Telegram 憑證監控機器人實作 EP2 - 打造自己的 TG Bot
Telegram 憑證監控機器人實作 EP2 - 打造自己的 TG Bot
👨💻 簡介
今天這篇主要是帶大家快速建立屬於自己的 Telegram bot,申請 bot 的部分我會附上網址,主要完成一些跟 Bot 的簡單回覆以及設定指令等等功能。
🛠️ 使用工具
- Python 3.9.6
- TG Bot 申請教學
📝 功能需求
- 輸入指令讓 TG Bot 回傳訊息
- 接受傳入參數並進行簡單回傳
- 設定 cronjob,固定時間回傳訊息
🎯Setup
要使用 TG Bot,可以使用 pyTelegramBotAPI 這個 Library,官網有簡單的範例可以讓我們快速上手。
- 輸入指令讓 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
(可選):這個參數可以用來指定消息文本的解析模式,例如,可以設置為Markdown
或HTML
以支持不同的文本格式化選項。
這樣就算是簡單的完成機器人的接收指令了。
- 接受傳入參數並進行簡單回傳
接下來試著讓它接受參數並在指定的群組做回傳
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
,參數就會被帶入到訊息裡了。
- 設定 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