HomeLập trìnhPythonCách tạo Bot...

Cách tạo Bot Telegram bằng Python


Chatbot tự động khá hữu ích để kích thích tương tác. Chúng tôi có thể tạo chatbot cho Slack, Discord và các nền tảng khác.

Trong bài viết này, tôi sẽ hướng dẫn bạn cách xây dựng một chatbot Telegram sẽ cho bạn biết tử vi của mình. Vậy hãy bắt đầu!

Cách nhận mã thông báo bot của bạn

Để thiết lập bot mới, bạn cần nói chuyện với BotFather. Không, anh ấy không phải là người – anh ấy cũng là một bot và anh ấy là ông chủ của tất cả các bot Telegram.

  1. Tìm kiếm @botfather trong Telegram.
Ảnh chụp màn hình-2022-12-16-092357
BotFather Telegram Bot

2. Bắt đầu cuộc trò chuyện với BotFather bằng cách nhấp vào nút Bắt đầu.

Ảnh chụp màn hình-2022-12-16-092531
Nhấp vào nút Bắt đầu

3. Loại /newbotvà làm theo lời nhắc để thiết lập bot mới. BotFather sẽ cung cấp cho bạn một mã thông báo mà bạn sẽ sử dụng để xác thực bot của mình và cấp cho nó quyền truy cập vào API Telegram.

Ảnh chụp màn hình-2022-12-16-093337
Nhận mã thông báo truy cập

Ghi chú: Đảm bảo bạn lưu trữ mã thông báo một cách an toàn. Bất kỳ ai có quyền truy cập mã thông báo của bạn đều có thể dễ dàng thao túng bot của bạn.

Cách thiết lập môi trường mã hóa của bạn

Hãy thiết lập môi trường viết mã. Mặc dù có sẵn nhiều thư viện khác nhau để tạo bot Telegram, chúng tôi sẽ sử dụng thư viện pyTelegramBotAPI. Đây là một triển khai Python đơn giản nhưng có thể mở rộng cho API Bot Telegram với cả khả năng đồng bộ và không đồng bộ.

Cài đặt thư viện pyTelegramBotAPI bằng pip:

pip install pyTelegramBotAPI

Tiếp theo, hãy mở trình chỉnh sửa mã yêu thích của bạn và tạo một .env tệp để lưu trữ mã thông báo của bạn như sau:

export BOT_TOKEN=your-bot-token-here

Sau đó, chạy source .env lệnh để đọc các biến môi trường từ .env tập tin.

Cách tạo Bot đầu tiên của bạn

Tất cả các triển khai API được lưu trữ trong một lớp duy nhất được gọi là TeleBot. Nó cung cấp nhiều cách để nghe tin nhắn đến cũng như các chức năng như send_message(), send_document()và những người khác để gửi tin nhắn.

Tạo một cái mới bot.py tệp và dán đoạn mã sau vào đó:

import os

import telebot

BOT_TOKEN = os.environ.get('BOT_TOKEN')

bot = telebot.TeleBot(BOT_TOKEN)

Trong đoạn mã trên, chúng tôi sử dụng os thư viện để đọc các biến môi trường được lưu trữ trong hệ thống của chúng tôi.

Đọc thêm  Hướng dẫn cạo web Python – Cách cạo dữ liệu từ bất kỳ trang web nào bằng Python

Nếu bạn còn nhớ, chúng tôi đã xuất một biến môi trường có tên là BOT_TOKEN ở bước trước. Giá trị của BOT_TOKEN được đọc trong một biến gọi là BOT_TOKEN. Hơn nữa, chúng tôi sử dụng các TeleBot class để tạo một phiên bản bot và chuyển BOT_TOKEN với nó.

Sau đó chúng ta cần đăng ký trình xử lý tin nhắn. Các trình xử lý thư này chứa các bộ lọc mà thư phải vượt qua. Nếu một tin nhắn vượt qua bộ lọc, chức năng trang trí được gọi và tin nhắn đến được cung cấp dưới dạng đối số.

Hãy định nghĩa một trình xử lý thư xử lý thư đến /start/hello mệnh lệnh.

@bot.message_handler(commands=['start', 'hello'])
def send_welcome(message):
    bot.reply_to(message, "Howdy, how are you doing?")

Bất kỳ tên nào cũng được chấp nhận cho một chức năng được trang trí bởi trình xử lý thông báo, nhưng nó chỉ có thể có một tham số (thông báo).

Hãy thêm một trình xử lý khác lặp lại tất cả các tin nhắn văn bản đến cho người gửi.

@bot.message_handler(func=lambda msg: True)
def echo_all(message):
    bot.reply_to(message, message.text)

Đoạn mã trên sử dụng một lambda biểu thức để kiểm tra một tin nhắn. Vì chúng tôi cần lặp lại tất cả các tin nhắn, chúng tôi luôn quay lại True từ lambda chức năng.

Bây giờ bạn có một bot đơn giản đáp ứng /start/hello các lệnh với một tin nhắn tĩnh và lặp lại tất cả các tin nhắn đã gửi khác. Thêm phần sau vào cuối tệp của bạn để khởi chạy bot:

bot.infinity_polling()

Đó là nó! Chúng tôi đã sẵn sàng một bot Telegram. Hãy chạy tệp Python và truy cập Telegram để kiểm tra bot.

Tìm kiếm bot bằng tên người dùng của nó nếu bạn không thể tìm thấy nó. Bạn có thể kiểm tra nó bằng cách gửi các lệnh như /hello/start và các văn bản ngẫu nhiên khác.

Ảnh chụp màn hình-2022-12-16-101334
thử nghiệm bot

Lưu ý: Tất cả các trình xử lý thư đều được kiểm tra theo thứ tự mà chúng được khai báo trong tệp nguồn.

Để biết thêm thông tin về cách sử dụng thư viện pyTelegramBotAPI, bạn có thể tham khảo tài liệu của họ tài liệu.

Cách mã hóa Bot Tử vi

Hãy chuyển sự chú ý của chúng ta sang việc xây dựng Bot Tử vi của chúng ta ngay bây giờ. Chúng tôi sẽ sử dụng chuỗi tin nhắn trong bot. Trước tiên, bot sẽ hỏi cung hoàng đạo của bạn, sau đó hỏi ngày, sau đó nó sẽ trả lời bằng tử vi cho ngày cụ thể đó.

Đọc thêm  Học Python bằng cách suy nghĩ theo kiểu

Về cơ bản, bot tương tác với API để lấy dữ liệu tử vi.

Chúng tôi sẽ sử dụng API Tử vi mà tôi đã tạo trong một hướng dẫn khác. Nếu bạn muốn tìm hiểu cách xây dựng một cái, bạn có thể xem qua hướng dẫn này. Đảm bảo bạn khám phá các API tại đây trước khi bắt đầu.

Cách lấy dữ liệu tử vi

Hãy tạo một hàm tiện ích để lấy dữ liệu tử vi cho một ngày cụ thể.

import requests

def get_daily_horoscope(sign: str, day: str) -> dict:
    """Get daily horoscope for a zodiac sign.
    Keyword arguments:
    sign:str - Zodiac sign
    day:str - Date in format (YYYY-MM-DD) OR TODAY OR TOMORROW OR YESTERDAY
    Return:dict - JSON data
    """
    url = "https://horoscope-app-api.vercel.app/api/v1/get-horoscope/daily"
    params = {"sign": sign, "day": day}
    response = requests.get(url, params)

    return response.json()

Trong mã Python ở trên, chúng tôi đã tạo một hàm chấp nhận hai đối số chuỗi – signday – và trả về dữ liệu JSON. Chúng tôi gửi yêu cầu GET trên URL API và vượt qua signday làm tham số truy vấn.

Nếu bạn kiểm tra chức năng, bạn sẽ nhận được kết quả tương tự như bên dưới:

{
   "data":{
      "date": "Dec 15, 2022",
      "horoscope_data": "Lie low during the day and try not to get caught up in the frivolous verbiage that dominates the waking hours. After sundown, feel free to speak your mind. You may notice that there is a sober tone and restrictive sensation today that leaves you feeling like you will never be able to break free from your current situation. Don't get caught in this negative mindset."
   },
   "status": 200,
   "success": true
}

Lưu ý: Bạn có thể khám phá thêm về requests thư viện bằng Python trong hướng dẫn này.

Cách thêm trình xử lý tin nhắn

Bây giờ chúng ta có một hàm trả về dữ liệu tử vi, hãy tạo một trình xử lý tin nhắn trong bot của chúng ta để yêu cầu cung hoàng đạo của người dùng.

@bot.message_handler(commands=['horoscope'])
def sign_handler(message):
    text = "What's your zodiac sign?\nChoose one: *Aries*, *Taurus*, *Gemini*, *Cancer,* *Leo*, *Virgo*, *Libra*, *Scorpio*, *Sagittarius*, *Capricorn*, *Aquarius*, and *Pisces*."
    sent_msg = bot.send_message(message.chat.id, text, parse_mode="Markdown")
    bot.register_next_step_handler(sent_msg, day_handler)

Hàm trên hơi khác một chút so với các hàm khác mà chúng tôi đã xác định trước đó. Chức năng tử vi của bot sẽ được gọi bởi /horoscope chỉ huy. Chúng tôi đang gửi tin nhắn văn bản tới người dùng, nhưng lưu ý rằng chúng tôi đã đặt parse_mode đến đánh dấu trong khi gửi tin nhắn.

Đọc thêm  Quét web bằng Python – Cách cạo dữ liệu từ Twitter bằng Tweepy và Snscrape

Vì chúng tôi sẽ sử dụng chuỗi thông báo, chúng tôi đã sử dụng register_next_step_handler() phương pháp. Phương thức này chấp nhận hai tham số: thông điệp được gửi bởi người dùng và chức năng gọi lại nên được gọi sau tin nhắn. Như vậy, chúng tôi vượt qua sent_msg biến và một cái mới day_handler hàm mà chúng ta sẽ định nghĩa tiếp theo.

Hãy xác định day_handler() chức năng chấp nhận tin nhắn.

def day_handler(message):
    sign = message.text
    text = "What day do you want to know?\nChoose one: *TODAY*, *TOMORROW*, *YESTERDAY*, or a date in format YYYY-MM-DD."
    sent_msg = bot.send_message(
        message.chat.id, text, parse_mode="Markdown")
    bot.register_next_step_handler(
        sent_msg, fetch_horoscope, sign.capitalize())

Chúng tôi lấy cung hoàng đạo từ message.text thuộc tính. Tương tự như chức năng trước, nó cũng hỏi ngày mà bạn muốn biết tử vi.

Cuối cùng, chúng tôi sử dụng cùng một register_next_step_handler() phương pháp và vượt qua sent_msgcác fetch_horoscope chức năng gọi lại, và sign.

Bây giờ chúng ta hãy xác định fetch_horoscope() chức năng chấp nhận tin nhắn và dấu hiệu.

def fetch_horoscope(message, sign):
    day = message.text
    horoscope = get_daily_horoscope(sign, day)
    data = horoscope["data"]
    horoscope_message = f'*Horoscope:* {data["horoscope_data"]}\\n*Sign:* {sign}\\n*Day:* {data["date"]}'
    bot.send_message(message.chat.id, "Here's your horoscope!")
    bot.send_message(message.chat.id, horoscope_message, parse_mode="Markdown")

Đây là chức năng cuối cùng mà chúng ta nhận được dấu hiệu từ tham số chức năng và ngày từ message.text thuộc tính.

Tiếp theo, chúng tôi lấy tử vi bằng cách sử dụng get_daily_horoscope() chức năng và xây dựng thông điệp của chúng tôi. Cuối cùng, chúng tôi gửi tin nhắn với dữ liệu tử vi.

Trình diễn bot

Khi bạn chạy tệp Python, bạn có thể kiểm tra chức năng này. Đây là bản trình diễn:

Bot Tử Vi Demo

Hiện tại, bot ngừng hoạt động ngay khi chúng tôi dừng ứng dụng Python của mình. Để làm cho nó luôn chạy, bạn có thể triển khai bot trên các nền tảng như Heroku, Render, v.v.

Đây là một liên kết đến repo GitHub cho dự án này – vui lòng kiểm tra nó.

Bạn cũng có thể thêm nhiều chức năng hơn cho bot bằng cách khám phá API Telegram.

Cảm ơn vì đã đọc! Bạn có thể theo dõi tôi trên Twitter.





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status