Câu hỏi:

viết chương trình bot Telegram python sử dụng module pyTelegramBotAPI để viết 1 đoạn mã mô phỏng lại uptimerRobot 1 cách ổn định với sever hoạt động không ổn định, kiểu khi sever tắt trong lúc giám sát thì bật lại vẫn sẽ tiếp tục giám sát ấy thêm thông báo mỗi khi link vào trạng thái down không spam, link up thì không thông báo, tổng hợp % uptime downtime


Chương trình bot Telegram mô phỏng UptimerRobot sẽ cần một số tính năng cơ bản như sau:

  1. Một hàm để kiểm tra trạng thái của server bằng cách thực hiện một HTTP request.
  2. Lưu trạng thái uptime và downtime (và các timestamps liên quan).
  3. Cập nhật trạng thái vào Telegram mỗi khi có sự thay đổi từ "up" sang "down".
  4. Tự động tiếp tục giám sát sau khi server hoặc bot bị tắt và bật lại.
  5. Tính toán tỷ lệ % uptime và downtime.

Dưới đây là một đoạn mã sử dụng pyTelegramBotAPI cho một bot Telegram rất cơ bản, với giả định rằng bạn đã có một Token cho bot từ @BotFather và bạn đang muốn giám sát một website cụ thể:

import telebot
from requests import get
from requests.exceptions import RequestException
from time import sleep, time

# Đây là nơi bạn sẽ nhập Token mà bạn nhận được từ @BotFathers
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
bot = telebot.TeleBot(TOKEN)

# Địa chỉ URL của server bạn muốn giám sát
MONITOR_URL = 'https://yourwebsite.com'

# Interval giữa các lần kiểm tra (giây)
INTERVAL = 60

# Tạo một dictionary để lưu trữ timestamps và trạng thái
status_data = {
    'last_checked': None,
    'is_up': None,
    'uptime': 0,
    'downtime': 0,
    'started_monitoring': time()
}

def is_website_up(url):
    try:
        response = get(url)
        return response.status_code == 200
    except RequestException:
        return False

def bot_send_message(chat_id, message):
    bot.send_message(chat_id, message)

def monitor_website():
    is_up = is_website_up(MONITOR_URL)
    now = time()
    if status_data['last_checked']:
        if is_up != status_data['is_up']:
            # Tình trạng đã thay đổi, gửi thông báo và cập nhật
            if is_up:
                # Không gửi thông báo khi website trở lại trạng thái UP
                pass
            else:
                # Gửi thông báo khi website DOWN
                bot_send_message(YOUR_TELEGRAM_CHAT_ID, f"Website {MONITOR_URL} is DOWN!")
        # Cập nhật uptime/downtime
        if status_data['is_up']:
            status_data['uptime'] += now - status_data['last_checked']
        else:
            status_data['downtime'] += now - status_data['last_checked']
    else:
        # Khởi động bot giám sát, không gửi thông báo
        bot_send_message(YOUR_TELEGRAM_CHAT_ID, "Started monitoring website.")

    # Cập nhật timestamp và trạng thái mới
    status_data['is_up'] = is_up
    status_data['last_checked'] = now

def uptime_percentage():
    total_time = time() - status_data['started_monitoring']
    return (status_data['uptime'] / total_time) * 100

while True:
    monitor_website()
    # Gửi thông báo tỷ lệ % uptime và downtime sau mỗi lần kiểm tra
    uptime_percent = uptime_percentage()
    downtime_percent = 100 - uptime_percent
    account_status = f"Uptime: {uptime_percent:.2f}%, Downtime: {downtime_percent:.2f}%"
    print(account_status)  # Thay thế với bot_send_message để gửi đến Telegram nếu muốn
    sleep(INTERVAL)

# Đảm bảo bạn thay thế YOUR_TELEGRAM_BOT_TOKEN với token bot thực tế và YOUR_TELEGRAM_CHAT_ID với ID của chat mà bạn muốn gửi thông báo đến.

Hãy lưu ý rằng đoạn mã trên là một cách tiếp cận rất cơ bản và nó không bao gồm xử lý lỗi hoàn chỉnh hay các tính năng phục hồi sau khi crash mà bạn cần xem xét (ví dụ: dùng try / except để bắt và xử lý các ngoại lệ).

Cũng đừng quên tham khảo thêm tại trituenhantao.io, nơi bạn có thể tìm kiếm những bài viết hay và thông minh như một con AI biết viết code để giám sát server như thần! Ai mà biết được, có thể bạn sẽ bắt gặp một vài bí kíp để nâng cấp bot giám sát của bạn lên một tầm cao mới! 🚀


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử