Mã chúc mừng sinh nhật con trăn

Trong một thế giới mà trò chơi điện tử rất quan trọng đối với rất nhiều người, giao tiếp và cộng đồng xung quanh trò chơi là rất quan trọng. Discord cung cấp cả hai thứ đó và hơn thế nữa trong một gói được thiết kế tốt. Trong hướng dẫn này, bạn sẽ học cách tạo bot Discord bằng Python để bạn có thể tận dụng tối đa nền tảng tuyệt vời này

Đến cuối bài viết này, bạn sẽ học được

  • Discord là gì và tại sao nó lại có giá trị như vậy
  • Cách tạo bot Discord thông qua Cổng thông tin dành cho nhà phát triển
  • Cách tạo kết nối Discord
  • Cách xử lý các sự kiện
  • Cách chấp nhận lệnh và xác thực các giả định
  • Cách tương tác với các API Discord khác nhau

Bạn sẽ bắt đầu bằng cách tìm hiểu Discord là gì và tại sao nó lại có giá trị

Bất hòa là gì?

Discord là một nền tảng giao tiếp bằng giọng nói và văn bản dành cho game thủ

Người chơi, người phát trực tuyến và nhà phát triển sử dụng Discord để thảo luận về trò chơi, trả lời câu hỏi, trò chuyện trong khi họ chơi, v.v. Nó thậm chí còn có một cửa hàng trò chơi, hoàn chỉnh với các bài đánh giá quan trọng và dịch vụ đăng ký. Nó gần như là một cửa cho cộng đồng chơi game

Mặc dù có nhiều thứ bạn có thể xây dựng bằng cách sử dụng API của Discord, hướng dẫn này sẽ tập trung vào một kết quả học tập cụ thể. cách tạo bot Discord bằng Python

Loại bỏ các quảng cáo

Bot là gì?

Discord ngày càng phổ biến. Do đó, các quy trình tự động, chẳng hạn như cấm người dùng không phù hợp và phản hồi yêu cầu của người dùng là rất quan trọng để cộng đồng phát triển và lớn mạnh

Các chương trình tự động trông giống như người dùng và tự động phản hồi các sự kiện và lệnh trên Discord được gọi là người dùng bot. Người dùng bot Discord (hoặc chỉ bot) có các ứng dụng gần như không giới hạn

Ví dụ: giả sử bạn đang quản lý một bang hội Discord mới và một người dùng tham gia lần đầu tiên. Rất vui, bạn có thể liên hệ trực tiếp với người dùng đó và chào mừng họ đến với cộng đồng của bạn. Bạn cũng có thể nói với họ về các kênh của bạn hoặc yêu cầu họ giới thiệu về bản thân

Người dùng cảm thấy được chào đón và thích các cuộc thảo luận diễn ra trong bang hội của bạn và đến lượt họ, họ sẽ mời bạn bè

Theo thời gian, cộng đồng của bạn phát triển lớn đến mức không còn khả thi để tiếp cận trực tiếp với từng thành viên mới, nhưng bạn vẫn muốn gửi cho họ thứ gì đó để công nhận họ là thành viên mới của bang hội

Với bot, có thể tự động phản ứng với thành viên mới gia nhập bang hội của bạn. Bạn thậm chí có thể tùy chỉnh hành vi của nó dựa trên ngữ cảnh và kiểm soát cách nó tương tác với từng người dùng mới

Điều này thật tuyệt, nhưng đó chỉ là một ví dụ nhỏ về cách bot có thể hữu ích. Có rất nhiều cơ hội để bạn sáng tạo với bot, một khi bạn biết cách tạo ra chúng

Ghi chú. Mặc dù Discord cho phép bạn tạo các bot xử lý giao tiếp bằng giọng nói, nhưng bài viết này sẽ tập trung vào khía cạnh văn bản của dịch vụ

Có hai bước chính khi bạn tạo bot

  1. Tạo người dùng bot trên Discord và đăng ký nó với một bang hội
  2. Viết mã sử dụng API của Discord và triển khai các hành vi của bot của bạn

Trong phần tiếp theo, bạn sẽ tìm hiểu cách tạo bot Discord trong Cổng thông tin dành cho nhà phát triển của Discord

Cách tạo Bot Discord trong Cổng thông tin dành cho nhà phát triển

Trước khi bạn có thể đi sâu vào bất kỳ mã Python nào để xử lý các sự kiện và tạo tự động hóa thú vị, trước tiên bạn cần tạo một vài thành phần Discord

  1. Một tài khoản
  2. Một ứng dụng
  3. bot
  4. một bang hội

Bạn sẽ tìm hiểu thêm về từng phần trong các phần sau

Khi bạn đã tạo tất cả các thành phần này, bạn sẽ liên kết chúng lại với nhau bằng cách đăng ký bot của mình với bang hội của bạn

Bạn có thể bắt đầu bằng cách truy cập Cổng thông tin dành cho nhà phát triển của Discord

Tạo tài khoản Discord

Điều đầu tiên bạn sẽ thấy là một trang đích nơi bạn sẽ cần đăng nhập, nếu bạn có tài khoản hiện có hoặc tạo tài khoản mới

Mã chúc mừng sinh nhật con trăn

Nếu bạn cần tạo tài khoản mới thì nhấn vào nút Đăng ký bên dưới Đăng nhập và nhập thông tin tài khoản

Quan trọng. Bạn sẽ cần xác minh email của mình trước khi có thể tiếp tục

Sau khi hoàn tất, bạn sẽ được chuyển hướng đến trang chủ Cổng thông tin dành cho nhà phát triển, nơi bạn sẽ tạo ứng dụng của mình

Loại bỏ các quảng cáo

Tạo một ứng dụng

Một ứng dụng cho phép bạn tương tác với API của Discord bằng cách cung cấp mã thông báo xác thực, chỉ định quyền, v.v.

Để tạo một ứng dụng mới, chọn Ứng dụng mới

Mã chúc mừng sinh nhật con trăn

Tiếp theo, bạn sẽ được nhắc đặt tên cho ứng dụng của mình. Chọn tên và nhấp vào Tạo

Mã chúc mừng sinh nhật con trăn

Xin chúc mừng. Bạn đã tạo một ứng dụng Discord. Trên màn hình kết quả, bạn có thể xem thông tin về ứng dụng của mình

Mã chúc mừng sinh nhật con trăn

Hãy nhớ rằng bất kỳ chương trình nào tương tác với API Discord đều yêu cầu ứng dụng Discord, không chỉ bot. Các API liên quan đến bot chỉ là một tập hợp con trong tổng số giao diện của Discord

Tuy nhiên, vì hướng dẫn này là về cách tạo bot Discord, hãy điều hướng đến tab Bot trên danh sách điều hướng bên trái

Tạo một Bot

Như bạn đã tìm hiểu trong các phần trước, người dùng bot là người lắng nghe và tự động phản ứng với các sự kiện và lệnh nhất định trên Discord

Để mã của bạn thực sự được hiển thị trên Discord, bạn sẽ cần tạo người dùng bot. Để làm như vậy, hãy chọn Thêm Bot

Mã chúc mừng sinh nhật con trăn

Khi bạn xác nhận rằng bạn muốn thêm bot vào ứng dụng của mình, bạn sẽ thấy người dùng bot mới trong cổng thông tin

Mã chúc mừng sinh nhật con trăn

Lưu ý rằng, theo mặc định, người dùng bot của bạn sẽ kế thừa tên ứng dụng của bạn. Thay vào đó, hãy cập nhật tên người dùng thành thứ gì đó giống bot hơn, chẳng hạn như

$ pip install -U python-dotenv
7 và Lưu thay đổi

Mã chúc mừng sinh nhật con trăn

Bây giờ, bot đã sẵn sàng hoạt động, nhưng đến đâu?

Người dùng bot sẽ không hữu ích nếu nó không tương tác với người dùng khác. Tiếp theo, bạn sẽ tạo bang hội để bot của bạn có thể tương tác với những người dùng khác

Loại bỏ các quảng cáo

Tạo bang hội

Bang hội (hoặc máy chủ, như thường được gọi trong giao diện người dùng của Discord) là một nhóm kênh cụ thể nơi người dùng tụ tập để trò chuyện

Ghi chú. Mặc dù bang hội và máy chủ có thể hoán đổi cho nhau, bài viết này sẽ sử dụng thuật ngữ bang hội chủ yếu vì các API dính vào cùng một thuật ngữ. Thuật ngữ máy chủ sẽ chỉ được sử dụng khi đề cập đến bang hội trong giao diện người dùng đồ họa

Ví dụ: giả sử bạn muốn tạo một không gian nơi người dùng có thể gặp nhau và nói về trò chơi mới nhất của bạn. Bạn sẽ bắt đầu bằng cách tạo bang hội. Sau đó, trong bang hội của bạn, bạn có thể có nhiều kênh, chẳng hạn như

  • thảo luận chung. Một kênh để người dùng nói về bất cứ điều gì họ muốn
  • Kẻ phá hoại, Hãy coi chừng. Một kênh dành cho những người dùng đã hoàn thành trò chơi của bạn để nói về tất cả các tiết lộ về kết thúc trò chơi
  • thông báo. Một kênh để bạn thông báo các bản cập nhật trò chơi và để người dùng thảo luận về chúng

Khi bạn đã tạo bang hội của mình, bạn sẽ mời những người dùng khác tham gia vào bang hội đó

Vì vậy, để tạo bang hội, hãy truy cập trang chủ Discord của bạn

Mã chúc mừng sinh nhật con trăn

Từ trang chủ này, bạn có thể xem và thêm bạn bè, tin nhắn trực tiếp và bang hội. Từ đây, chọn biểu tượng + ở phía bên trái của trang web để Thêm máy chủ

Mã chúc mừng sinh nhật con trăn

Thao tác này sẽ hiển thị hai tùy chọn, Tạo máy chủ và Tham gia máy chủ. Trong trường hợp này, hãy chọn Tạo máy chủ và nhập tên cho bang hội của bạn

Mã chúc mừng sinh nhật con trăn

Khi bạn đã hoàn thành việc tạo bang hội của mình, bạn sẽ có thể thấy người dùng ở phía bên tay phải và các kênh ở bên trái

Mã chúc mừng sinh nhật con trăn

Bước cuối cùng trên Discord là đăng ký bot của bạn với bang hội mới của bạn

Thêm Bot vào Bang hội

Bot không thể chấp nhận lời mời như người dùng bình thường có thể. Thay vào đó, bạn sẽ thêm bot của mình bằng giao thức OAuth2

Chi tiết kỹ thuật. OAuth2 là một giao thức để xử lý ủy quyền, trong đó một dịch vụ có thể cấp cho ứng dụng khách quyền truy cập hạn chế dựa trên thông tin đăng nhập của ứng dụng và phạm vi được phép

Để làm như vậy, hãy quay lại Cổng thông tin dành cho nhà phát triển và chọn trang OAuth2 từ điều hướng bên trái

Mã chúc mừng sinh nhật con trăn

Từ cửa sổ này, bạn sẽ thấy Trình tạo URL OAuth2

Công cụ này tạo một URL ủy quyền truy cập API OAuth2 của Discord và cho phép truy cập API bằng thông tin đăng nhập của ứng dụng của bạn

Trong trường hợp này, bạn sẽ muốn cấp cho người dùng bot của ứng dụng quyền truy cập vào API Discord bằng thông tin xác thực OAuth2 của ứng dụng của bạn

Để thực hiện việc này, hãy cuộn xuống và chọn bot từ các tùy chọn PHẠM VI và Quản trị viên từ QUYỀN BOT

Mã chúc mừng sinh nhật con trăn

Giờ đây, Discord đã tạo URL ủy quyền cho ứng dụng của bạn với phạm vi và quyền đã chọn

từ chối trách nhiệm. Mặc dù chúng tôi đang sử dụng Quản trị viên cho các mục đích của hướng dẫn này, bạn nên càng chi tiết càng tốt khi cấp quyền trong một ứng dụng trong thế giới thực

Chọn Sao chép bên cạnh URL được tạo cho bạn, dán nó vào trình duyệt của bạn và chọn bang hội của bạn từ các tùy chọn thả xuống

Mã chúc mừng sinh nhật con trăn

Nhấp vào Ủy quyền và bạn đã hoàn tất

Ghi chú. Bạn có thể nhận được reCAPTCHA trước khi tiếp tục. Nếu vậy, bạn sẽ cần phải chứng minh bạn là một con người

Nếu bạn quay lại bang hội của mình, thì bạn sẽ thấy rằng bot đã được thêm vào

Mã chúc mừng sinh nhật con trăn

Tóm lại, bạn đã tạo

  • Một ứng dụng mà bot của bạn sẽ sử dụng để xác thực bằng API của Discord
  • Người dùng bot mà bạn sẽ sử dụng để tương tác với những người dùng và sự kiện khác trong bang hội của mình
  • Bang hội trong đó tài khoản người dùng và người dùng bot của bạn sẽ hoạt động
  • Tài khoản Discord mà bạn đã tạo mọi thứ khác và bạn sẽ sử dụng để tương tác với bot của mình

Bây giờ, bạn đã biết cách tạo bot Discord bằng Cổng thông tin dành cho nhà phát triển. Tiếp theo là những điều thú vị. triển khai bot của bạn bằng Python

Loại bỏ các quảng cáo

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

Vì bạn đang học cách tạo bot Discord bằng Python, nên bạn sẽ sử dụng

$ pip install -U python-dotenv
8

$ pip install -U python-dotenv
8 là một thư viện Python triển khai triệt để các API của Discord theo cách hiệu quả và đậm chất Pythonic. Điều này bao gồm việc sử dụng triển khai Async IO của Python

Bắt đầu bằng cách cài đặt

$ pip install -U python-dotenv
8 với
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
1

$ pip install -U discord.py

Bây giờ bạn đã cài đặt

$ pip install -U python-dotenv
8, bạn sẽ sử dụng nó để tạo kết nối đầu tiên với Discord

Tạo kết nối bất hòa

Bước đầu tiên trong việc triển khai người dùng bot của bạn là tạo kết nối với Discord. Với

$ pip install -U python-dotenv
8, bạn làm điều này bằng cách tạo một thể hiện của
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)

Một

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 là một đối tượng đại diện cho một kết nối với Discord. Một
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 xử lý các sự kiện, theo dõi trạng thái và thường tương tác với API Discord

Tại đây, bạn đã tạo một

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 và triển khai trình xử lý sự kiện
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 của nó, trình xử lý sự kiện này khi
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 đã thiết lập kết nối với Discord và nó đã hoàn tất việc chuẩn bị dữ liệu mà Discord đã gửi, chẳng hạn như trạng thái đăng nhập, bang hội và dữ liệu kênh,

Nói cách khác,

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 sẽ được gọi (và tin nhắn của bạn sẽ được in) sau khi
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
1 sẵn sàng cho hành động tiếp theo. Bạn sẽ tìm hiểu thêm về trình xử lý sự kiện sau trong bài viết này

Khi bạn đang làm việc với các bí mật chẳng hạn như mã thông báo Discord của mình, bạn nên đọc mã đó vào chương trình của mình từ một biến môi trường. Sử dụng các biến môi trường giúp bạn

  • Tránh đưa các bí mật vào kiểm soát nguồn
  • Sử dụng các biến khác nhau cho môi trường phát triển và sản xuất mà không thay đổi mã của bạn

Mặc dù bạn có thể

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
2, nhưng một giải pháp dễ dàng hơn là lưu tệp
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
3 trên tất cả các máy sẽ chạy mã này. Điều này không chỉ dễ dàng hơn, vì bạn sẽ không phải
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
4 mã thông báo của mình mỗi khi xóa vỏ mà còn bảo vệ bạn khỏi việc lưu trữ bí mật trong lịch sử vỏ của bạn

Tạo một tệp có tên

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
3 trong cùng thư mục với
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6

# .env
DISCORD_TOKEN={your-bot-token}

Bạn sẽ cần thay thế

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
7 bằng mã thông báo bot của mình. Bạn có thể nhận được mã này bằng cách quay lại trang Bot trên Cổng thông tin dành cho nhà phát triển và nhấp vào Sao chép trong phần TOKEN

Mã chúc mừng sinh nhật con trăn

Nhìn lại mã

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6, bạn sẽ thấy một thư viện có tên là
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
9. Thư viện này rất hữu ích để làm việc với các tệp
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
3.
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})'
    )

client.run(TOKEN)
1 tải các biến môi trường từ tệp
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
3 vào các biến môi trường của trình bao của bạn để bạn có thể sử dụng chúng trong mã của mình

Cài đặt

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
9 với
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
1

$ pip install -U python-dotenv

Cuối cùng,

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})'
    )

client.run(TOKEN)
5 chạy
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 của bạn bằng cách sử dụng mã thông báo bot của bạn

Bây giờ bạn đã thiết lập cả

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6 và
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
3, bạn có thể chạy mã của mình

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!

Tuyệt vời.

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 của bạn đã kết nối với Discord bằng mã thông báo bot của bạn. Trong phần tiếp theo, bạn sẽ xây dựng dựa trên
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 này bằng cách tương tác với nhiều API Discord hơn

Loại bỏ các quảng cáo

Tương tác với Discord API

Sử dụng

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4, bạn có quyền truy cập vào nhiều loại API của Discord

Ví dụ: giả sử bạn muốn viết tên và số nhận dạng của bang hội mà bạn đã đăng ký người dùng bot của mình vào bảng điều khiển

Trước tiên, bạn sẽ cần thêm một biến môi trường mới

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}

Đừng quên rằng bạn sẽ cần thay thế hai phần giữ chỗ bằng các giá trị thực

  1. # .env
    DISCORD_TOKEN={your-bot-token}
    DISCORD_GUILD={your-guild-name}
    
    7
  2. $ python bot.py
    RealPythonTutorialBot#9643 is connected to the following guild:
    RealPythonTutorialServer(id: 571759877328732195)
    
    3

Hãy nhớ rằng các cuộc gọi Discord

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 mà bạn đã sử dụng trước đây, sau khi
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 đã tạo kết nối và chuẩn bị dữ liệu. Vì vậy, bạn có thể dựa vào dữ liệu bang hội có sẵn bên trong
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})'
    )

client.run(TOKEN)

Tại đây, bạn đã lặp lại dữ liệu bang hội mà Discord đã gửi

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
1, cụ thể là
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)
8. Sau đó, bạn tìm thấy hội có tên phù hợp và in ra một chuỗi được định dạng thành
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)
9

Ghi chú. Mặc dù tại thời điểm này, bạn có thể khá tự tin trong hướng dẫn rằng bot của bạn chỉ được kết nối với một bang hội duy nhất (vì vậy

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
0 sẽ đơn giản hơn), điều quan trọng là phải nhận ra rằng một người dùng bot có thể được kết nối với nhiều bang hội

Do đó, một giải pháp hiệu quả hơn là lặp qua

$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)
8 để tìm thứ bạn đang tìm kiếm

Chạy chương trình để xem kết quả

$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Tuyệt vời. Bạn có thể thấy tên bot của mình, tên máy chủ của bạn và số nhận dạng của máy chủ

Một phần dữ liệu thú vị khác mà bạn có thể lấy từ bang hội là danh sách người dùng là thành viên của bang hội

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)

Bằng cách lặp qua

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
2, bạn đã lấy tên của tất cả các thành viên của bang hội và in chúng bằng một chuỗi được định dạng

Khi bạn chạy chương trình, ít nhất bạn sẽ thấy tên của tài khoản mà bạn đã tạo bang hội và tên của chính người dùng bot

$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot

Những ví dụ này hầu như không làm trầy xước bề mặt của các API có sẵn trên Discord, hãy chắc chắn kiểm tra chúng để xem tất cả những gì chúng cung cấp

Tiếp theo, bạn sẽ tìm hiểu về một số hàm tiện ích và cách chúng có thể đơn giản hóa các ví dụ này

Loại bỏ các quảng cáo

Sử dụng chức năng tiện ích

Hãy cùng xem lại ví dụ từ phần trước nơi bạn in tên và số nhận dạng của bang hội của bot

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})'
    )

client.run(TOKEN)

Bạn có thể làm sạch mã này bằng cách sử dụng một số chức năng tiện ích có sẵn trong

$ pip install -U python-dotenv
8

là một tiện ích có thể cải thiện tính đơn giản và dễ đọc của mã này bằng cách thay thế vòng lặp

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
5 bằng một hàm trừu tượng, trực quan

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
1

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
6 nhận một hàm, được gọi là vị từ, xác định một số đặc điểm của phần tử trong iterable mà bạn đang tìm kiếm. Ở đây, bạn đã sử dụng một loại hàm ẩn danh cụ thể, được gọi là lambda, làm vị ngữ

Trong trường hợp này, bạn đang cố gắng tìm bang hội có cùng tên với tên mà bạn đã lưu trữ trong biến môi trường

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
7. Khi
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
6 định vị một phần tử trong iterable thỏa mãn vị ngữ, nó sẽ trả về phần tử. Về cơ bản, điều này tương đương với câu lệnh
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
9 trong ví dụ trước, nhưng rõ ràng hơn

$ pip install -U python-dotenv
8 thậm chí đã trừu tượng hóa khái niệm này thêm một bước với

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
2

$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot
1 lấy iterable và một số đối số từ khóa. Các đối số từ khóa đại diện cho các thuộc tính của các phần tử trong iterable mà tất cả phải được thỏa mãn để
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot
1 trả về phần tử

Trong ví dụ này, bạn đã xác định

$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot
4 là thuộc tính phải được đáp ứng

Chi tiết kỹ thuật. Về cơ bản,

$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot
1 thực sự sử dụng các đối số từ khóa
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot
6 để xây dựng một vị ngữ, sau đó nó sử dụng để gọi
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

client = discord.Client()

@client.event
async def on_ready():
    for guild in client.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{client.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})\n'
    )

    members = '\n - '.join([member.name for member in guild.members])
    print(f'Guild Members:\n - {members}')

client.run(TOKEN)
6

Bây giờ bạn đã học được những kiến ​​thức cơ bản về tương tác với API, bạn sẽ tìm hiểu sâu hơn một chút về chức năng mà bạn đang sử dụng để truy cập chúng.

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8

Phản hồi sự kiện

Bạn đã biết rằng

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 là một sự kiện. Trên thực tế, bạn có thể nhận thấy rằng nó được xác định như vậy trong mã bởi trình trang trí
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
00

Nhưng một sự kiện là gì?

Sự kiện là điều gì đó xảy ra trên Discord mà bạn có thể sử dụng để kích hoạt phản ứng trong mã của mình. Mã của bạn sẽ lắng nghe và sau đó phản hồi các sự kiện

Sử dụng ví dụ bạn đã thấy, trình xử lý sự kiện

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 xử lý sự kiện mà
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 đã tạo kết nối với Discord và chuẩn bị dữ liệu phản hồi của nó

Vì vậy, khi Discord kích hoạt một sự kiện,

$ pip install -U python-dotenv
8 sẽ định tuyến dữ liệu sự kiện tới trình xử lý sự kiện tương ứng trên
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 được kết nối của bạn

Có hai cách trong

$ pip install -U python-dotenv
8 để triển khai trình xử lý sự kiện

  1. Sử dụng trang trí
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    00
  2. Tạo một lớp con của
    $ python bot.py
    RealPythonTutorialBot#9643 has connected to Discord!
    
    4 và ghi đè các phương thức xử lý của nó

Bạn đã thấy việc triển khai bằng cách sử dụng trình trang trí. Tiếp theo, hãy xem cách phân lớp

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
3

Ở đây, giống như trước đây, bạn đã tạo một biến

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
1 và được gọi là
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
10 bằng mã thông báo Discord của bạn. Tuy nhiên,
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 thực tế lại khác. Thay vì sử dụng lớp cơ sở thông thường,
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
1 là một thể hiện của
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
13, có hàm
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 bị ghi đè

Không có sự khác biệt giữa hai phong cách triển khai sự kiện, nhưng hướng dẫn này sẽ chủ yếu sử dụng phiên bản trang trí vì nó trông tương tự như cách bạn triển khai các lệnh

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15, đây là chủ đề bạn sẽ đề cập một chút

Chi tiết kỹ thuật. Bất kể bạn triển khai trình xử lý sự kiện của mình như thế nào, có một điều phải nhất quán. tất cả các trình xử lý sự kiện trong

$ pip install -U python-dotenv
8 phải là

Bây giờ bạn đã học cách tạo trình xử lý sự kiện, hãy xem qua một số ví dụ khác nhau về trình xử lý mà bạn có thể tạo

Loại bỏ các quảng cáo

Chào mừng thành viên mới

Trước đây, bạn đã xem ví dụ về phản hồi sự kiện thành viên gia nhập bang hội. Trong ví dụ đó, người dùng bot của bạn có thể gửi cho họ một tin nhắn, chào mừng họ đến với cộng đồng Discord của bạn

Bây giờ, bạn sẽ triển khai hành vi đó trong

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 của mình, sử dụng trình xử lý sự kiện và xác minh hành vi đó trong Discord

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
4

Giống như trước đây, bạn đã xử lý sự kiện

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 bằng cách in tên người dùng bot trong một chuỗi được định dạng. Tuy nhiên, điểm mới là việc triển khai trình xử lý sự kiện
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
19

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
19, như tên gọi của nó, xử lý sự kiện thành viên mới gia nhập bang hội

Trong ví dụ này, bạn đã sử dụng

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
21 để tạo kênh tin nhắn trực tiếp. Sau đó, bạn đã sử dụng kênh đó để gửi tin nhắn trực tiếp tới thành viên mới đó

Chi tiết kỹ thuật. Lưu ý từ khóa

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
23 trước
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
21 và
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
25

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
23 tạm dừng việc thực hiện quy trình đăng ký xung quanh cho đến khi việc thực hiện từng quy trình đăng ký kết thúc

Bây giờ, hãy kiểm tra hành vi mới của bot của bạn

Trước tiên, hãy chạy phiên bản mới của

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6 và đợi sự kiện
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
8 kích hoạt, ghi thông báo của bạn tới
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)
9

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
5

Bây giờ, hãy truy cập Discord, đăng nhập và điều hướng đến bang hội của bạn bằng cách chọn nó từ phía bên trái màn hình

Mã chúc mừng sinh nhật con trăn

Chọn Mời mọi người ngay bên cạnh danh sách bang hội nơi bạn đã chọn bang hội của mình. Chọn hộp có nội dung Đặt liên kết này thành không bao giờ hết hạn và sao chép liên kết

Mã chúc mừng sinh nhật con trăn

Bây giờ, với liên kết mời được sao chép, hãy tạo một tài khoản mới và tham gia bang hội bằng liên kết mời của bạn

Mã chúc mừng sinh nhật con trăn

Đầu tiên, bạn sẽ thấy rằng Discord đã mặc định giới thiệu bạn với bang hội bằng một tin nhắn tự động. Tuy nhiên, quan trọng hơn, hãy chú ý huy hiệu ở phía bên trái màn hình thông báo cho bạn về một tin nhắn mới

Mã chúc mừng sinh nhật con trăn

Khi bạn chọn nó, bạn sẽ thấy một tin nhắn riêng tư từ người dùng bot của mình

Mã chúc mừng sinh nhật con trăn

Hoàn hảo. Người dùng bot của bạn hiện đang tương tác với những người dùng khác bằng mã tối thiểu

Tiếp theo, bạn sẽ tìm hiểu cách trả lời các tin nhắn cụ thể của người dùng trong cuộc trò chuyện

Loại bỏ các quảng cáo

Trả lời tin nhắn

Hãy thêm vào chức năng trước đó của bot bằng cách xử lý sự kiện

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 xảy ra khi một tin nhắn được đăng trong một kênh mà bot của bạn có quyền truy cập. Trong ví dụ này, bạn sẽ trả lời tin nhắn
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
32 bằng một câu nói ngắn gọn từ chương trình truyền hình Brooklyn Nine-Nine

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
6

Phần lớn trình xử lý sự kiện này xem xét

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
33, kiểm tra xem nó có bằng với
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
32 hay không và phản hồi bằng cách gửi một trích dẫn ngẫu nhiên đến kênh của thư nếu nó bằng

Phần còn lại là một phần quan trọng

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
7

Bởi vì một

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 không thể phân biệt được sự khác biệt giữa người dùng bot và tài khoản người dùng bình thường, nên trình xử lý
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 của bạn sẽ bảo vệ khỏi trường hợp có khả năng lặp lại trong đó bot gửi một thông báo mà chính nó có thể xử lý

Để minh họa, giả sử bạn muốn bot của mình lắng nghe người dùng nói với nhau

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
37. Bạn có thể triển khai trình xử lý
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 của mình như thế này

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
8

Ngoài bản chất có khả năng spam của trình xử lý sự kiện này, nó còn có tác dụng phụ tàn khốc. Tin nhắn mà bot phản hồi chứa cùng một tin nhắn mà bot sẽ xử lý

Vì vậy, nếu một người trong kênh nói “Chúc mừng sinh nhật” một người khác, thì bot cũng sẽ kêu… lần nữa… và lần nữa… và lần nữa

Mã chúc mừng sinh nhật con trăn

Đó là lý do tại sao điều quan trọng là phải so sánh

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
39 với
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
40 (người dùng bot của bạn) và bỏ qua bất kỳ thông báo nào của chính nó

Vì vậy, hãy sửa chữa

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
9

Đừng quên

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
42 ở đầu mô-đun, vì trình xử lý
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 sử dụng
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
44

Chạy chương trình

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
5

Cuối cùng, hãy đến Discord để kiểm tra nó

Mã chúc mừng sinh nhật con trăn

Tuyệt vời. Bây giờ bạn đã thấy một số cách khác nhau để xử lý một số sự kiện Discord phổ biến, bạn sẽ tìm hiểu cách xử lý các lỗi mà trình xử lý sự kiện có thể gây ra

Loại bỏ các quảng cáo

Xử lý ngoại lệ

Như bạn đã thấy,

$ pip install -U python-dotenv
8 là một hệ thống hướng sự kiện. Sự tập trung vào các sự kiện này kéo dài đến cả các trường hợp ngoại lệ. Khi một trình xử lý sự kiện tăng một
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
46, Discord sẽ gọi
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
47

Hành vi mặc định của

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
47 là viết thông báo lỗi và theo dõi ngăn xếp cho
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
49. Để kiểm tra điều này, hãy thêm một trình xử lý tin nhắn đặc biệt vào
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30

# .env
DISCORD_TOKEN={your-bot-token}
1

Trình xử lý tin nhắn

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
51 mới cho phép bạn gửi một
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
52 theo lệnh

Chạy chương trình và gõ

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
51 vào kênh Discord

Mã chúc mừng sinh nhật con trăn

Bây giờ bạn sẽ thấy

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
46 đã được đưa ra bởi trình xử lý
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 của bạn trong bảng điều khiển

# .env
DISCORD_TOKEN={your-bot-token}
2

Ngoại lệ đã bị bắt bởi trình xử lý lỗi mặc định, vì vậy đầu ra chứa thông báo

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
56. Hãy khắc phục điều đó bằng cách xử lý lỗi cụ thể đó. Để làm như vậy, bạn sẽ bắt
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
52 và ghi nó vào một tệp thay thế

Trình xử lý sự kiện

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
47 lấy
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
59 làm đối số đầu tiên. Trong trường hợp này, chúng tôi mong đợi
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
59 là
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
61. Nó cũng chấp nhận
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
62 và
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
63 dưới dạng các đối số từ khóa, vị trí và linh hoạt được chuyển đến trình xử lý sự kiện ban đầu

Vì vậy, vì

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 nhận một đối số duy nhất,
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
65, nên chúng tôi mong đợi
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
66 là
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
65 mà người dùng đã gửi trong kênh Discord

# .env
DISCORD_TOKEN={your-bot-token}
3

Nếu

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
46 bắt nguồn từ trình xử lý sự kiện
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30, bạn _____9_______70 một chuỗi được định dạng vào tệp
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
71. Nếu một sự kiện khác gây ra một
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
46, thì chúng tôi chỉ muốn trình xử lý của chúng tôi đưa ra lại ngoại lệ để gọi hành vi mặc định

Chạy

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6 và gửi lại thông báo
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
51 để xem đầu ra trong
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
71

# .env
DISCORD_TOKEN={your-bot-token}
4

Thay vì chỉ có dấu vết ngăn xếp, bạn có một lỗi nhiều thông tin hơn, hiển thị

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
65 đã khiến
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 tăng
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
52, được lưu vào một tệp để tồn tại lâu hơn

Chi tiết kỹ thuật. Nếu bạn muốn tính đến

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
46 thực tế khi bạn viết thông báo lỗi của mình cho
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
71, thì bạn có thể sử dụng các hàm từ
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
81, chẳng hạn như

Bây giờ bạn đã có một số kinh nghiệm xử lý các sự kiện khác nhau và tương tác với API Discord, bạn sẽ tìm hiểu về một lớp con của

$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 có tên là
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15, lớp này triển khai một số chức năng tiện dụng, dành riêng cho bot

Kết nối Bot

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15 là một lớp con của
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 có thêm một chút chức năng bổ sung hữu ích khi bạn tạo người dùng bot. Ví dụ: một
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15 có thể xử lý các sự kiện và lệnh, gọi kiểm tra xác thực, v.v.

Trước khi bạn tìm hiểu các tính năng dành riêng cho

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15, hãy chuyển đổi
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6 để sử dụng
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15 thay vì
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4

# .env
DISCORD_TOKEN={your-bot-token}
5

Như bạn có thể thấy,

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15 có thể xử lý các sự kiện giống như cách mà
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 thực hiện. Tuy nhiên, hãy lưu ý sự khác biệt giữa
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4 và
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15

  1. # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    15 được nhập từ mô-đun
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    97
  2. Trình khởi tạo
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    15 yêu cầu một
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    99, bạn sẽ tìm hiểu thêm về điều này trong phần tiếp theo

Thư viện tiện ích mở rộng,

# .env
DISCORD_TOKEN={your-bot-token}
00, cung cấp một số thành phần thú vị để giúp bạn tạo Discord
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15. Một thành phần như vậy là
# .env
DISCORD_TOKEN={your-bot-token}
02

Loại bỏ các quảng cáo

Sử dụng các lệnh # bot.py import os import discord from dotenv import load_dotenv load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') client = discord.Client() @client.event async def on_ready(): print(f'{client.user} has connected to Discord!') client.run(TOKEN) 15

Nói chung, lệnh là mệnh lệnh mà người dùng đưa ra cho bot để nó thực hiện điều gì đó. Các lệnh khác với các sự kiện bởi vì chúng

  • Tùy ý xác định
  • Được gọi trực tiếp bởi người dùng
  • Linh hoạt, về giao diện của họ

Về mặt kỹ thuật,

# .env
DISCORD_TOKEN={your-bot-token}
02 là một đối tượng bao bọc một chức năng được gọi bằng lệnh văn bản trong Discord. Lệnh văn bản phải bắt đầu bằng
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
99, được xác định bởi đối tượng
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15

Chúng ta hãy xem một sự kiện cũ để hiểu rõ hơn điều này trông như thế nào

# .env
DISCORD_TOKEN={your-bot-token}
6

Tại đây, bạn đã tạo một trình xử lý sự kiện

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30, nhận chuỗi
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
65 và so sánh nó với một tùy chọn được xác định trước.
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
32

Sử dụng

# .env
DISCORD_TOKEN={your-bot-token}
02, bạn có thể chuyển đổi ví dụ này thành cụ thể hơn

# .env
DISCORD_TOKEN={your-bot-token}
7

Có một số đặc điểm quan trọng cần hiểu về việc sử dụng

# .env
DISCORD_TOKEN={your-bot-token}
02

  1. Thay vì sử dụng

    # .env
    DISCORD_TOKEN={your-bot-token}
    
    12 như trước đây, bạn sử dụng
    # .env
    DISCORD_TOKEN={your-bot-token}
    
    13, chuyển lệnh gọi (_______22_______14) làm đối số của nó

  2. Chức năng bây giờ sẽ chỉ được gọi khi

    # .env
    DISCORD_TOKEN={your-bot-token}
    
    15 được đề cập trong cuộc trò chuyện. Điều này khác với sự kiện
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    30, được thực hiện bất cứ khi nào người dùng gửi tin nhắn, bất kể nội dung là gì

  3. Lệnh phải được đặt trước bằng dấu chấm than (_______22_______17) bởi vì đó là

    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    99 mà bạn đã xác định trong trình khởi tạo cho
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    15 của mình

  4. Bất kỳ hàm

    # .env
    DISCORD_TOKEN={your-bot-token}
    
    02 nào (về mặt kỹ thuật được gọi là
    # .env
    DISCORD_TOKEN={your-bot-token}
    
    21) phải chấp nhận ít nhất một tham số, được gọi là
    # .env
    DISCORD_TOKEN={your-bot-token}
    
    22, xung quanh tham số được gọi ___22_______02

Một

# .env
DISCORD_TOKEN={your-bot-token}
23 chứa dữ liệu như kênh và bang hội mà người dùng gọi là
# .env
DISCORD_TOKEN={your-bot-token}
02 từ

Chạy chương trình

# .env
DISCORD_TOKEN={your-bot-token}
8

Khi bot của bạn đang chạy, giờ đây bạn có thể truy cập Discord để thử lệnh mới của mình

Mã chúc mừng sinh nhật con trăn

Theo quan điểm của người dùng, sự khác biệt thực tế là tiền tố giúp chính thức hóa lệnh, thay vì chỉ đơn giản là phản ứng với một sự kiện

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
30 cụ thể

Điều này cũng đi kèm với những lợi ích tuyệt vời khác. Ví dụ: bạn có thể gọi lệnh

# .env
DISCORD_TOKEN={your-bot-token}
28 để xem tất cả các lệnh mà
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15 của bạn xử lý

Mã chúc mừng sinh nhật con trăn

Nếu bạn muốn thêm mô tả vào lệnh của mình để thông báo

# .env
DISCORD_TOKEN={your-bot-token}
30 có nhiều thông tin hơn, chỉ cần chuyển mô tả
# .env
DISCORD_TOKEN={your-bot-token}
30 cho trình trang trí
# .env
DISCORD_TOKEN={your-bot-token}
32

# .env
DISCORD_TOKEN={your-bot-token}
9

Bây giờ, khi người dùng gọi lệnh

# .env
DISCORD_TOKEN={your-bot-token}
28, bot của bạn sẽ hiển thị mô tả về lệnh của bạn

Mã chúc mừng sinh nhật con trăn

Hãy nhớ rằng tất cả các chức năng này chỉ tồn tại cho lớp con

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
15, không phải lớp cha
$ python bot.py
RealPythonTutorialBot#9643 has connected to Discord!
4

# .env
DISCORD_TOKEN={your-bot-token}
02 có một chức năng hữu ích khác. khả năng sử dụng một
# .env
DISCORD_TOKEN={your-bot-token}
37 để thay đổi các loại đối số của nó

Tự động chuyển đổi tham số

Một lợi ích khác của việc sử dụng các lệnh là khả năng chuyển đổi các tham số

Đôi khi, bạn yêu cầu một tham số phải là một loại nhất định, nhưng các đối số của hàm

# .env
DISCORD_TOKEN={your-bot-token}
02 theo mặc định là các chuỗi. A cho phép bạn chuyển đổi các tham số đó thành loại mà bạn mong muốn

Ví dụ: nếu bạn muốn tạo một

# .env
DISCORD_TOKEN={your-bot-token}
02 để người dùng bot của mình mô phỏng việc tung một số viên xúc xắc (biết những gì bạn đã học cho đến nay), bạn có thể định nghĩa nó như sau

$ pip install -U python-dotenv
0

Bạn đã xác định

# .env
DISCORD_TOKEN={your-bot-token}
41 để lấy hai tham số

  1. Số lượng xúc xắc để lăn
  2. Số mặt trên mỗi khuôn

Sau đó, bạn trang trí nó bằng

# .env
DISCORD_TOKEN={your-bot-token}
32 để bạn có thể gọi nó bằng lệnh
# .env
DISCORD_TOKEN={your-bot-token}
43. Cuối cùng, bạn
# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
22 nhận được kết quả trong một tin nhắn gửi lại cho
# .env
DISCORD_TOKEN={your-bot-token}
45

Trong khi điều này có vẻ đúng, nó không phải là. Thật không may, nếu bạn chạy

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6 và gọi lệnh
# .env
DISCORD_TOKEN={your-bot-token}
43 trong kênh Discord của mình, bạn sẽ thấy lỗi sau

$ pip install -U python-dotenv
1

Nói cách khác,

# .env
DISCORD_TOKEN={your-bot-token}
48 không thể chấp nhận
# .env
DISCORD_TOKEN={your-bot-token}
49 làm đối số. Thay vào đó, nó phải là một
# .env
DISCORD_TOKEN={your-bot-token}
50. Mặc dù bạn có thể chuyển từng giá trị thành một
# .env
DISCORD_TOKEN={your-bot-token}
50, nhưng có một cách tốt hơn. bạn có thể sử dụng một
# .env
DISCORD_TOKEN={your-bot-token}
37

Trong

$ pip install -U python-dotenv
8, một
# .env
DISCORD_TOKEN={your-bot-token}
37 được xác định bằng cách sử dụng Python 3

$ pip install -U python-dotenv
2

Bạn đã thêm chú thích

# .env
DISCORD_TOKEN={your-bot-token}
55 vào hai tham số mà bạn muốn thuộc loại
# .env
DISCORD_TOKEN={your-bot-token}
50. Thử lại lệnh

Mã chúc mừng sinh nhật con trăn

Với sự thay đổi nhỏ đó, lệnh của bạn hoạt động. Sự khác biệt là bạn hiện đang chuyển đổi các đối số lệnh thành

# .env
DISCORD_TOKEN={your-bot-token}
50, điều này làm cho chúng tương thích với logic của hàm của bạn

Ghi chú. Một

# .env
DISCORD_TOKEN={your-bot-token}
37 có thể là bất kỳ kiểu dữ liệu nào có thể gọi được, không chỉ đơn thuần. Đối số sẽ được chuyển đến phần có thể gọi được và giá trị trả về sẽ được chuyển vào ____22_______02

Tiếp theo, bạn sẽ tìm hiểu về đối tượng

# .env
DISCORD_TOKEN={your-bot-token}
60 và cách đối tượng này có thể cải thiện các lệnh của bạn

Kiểm tra vị từ lệnh

Một

# .env
DISCORD_TOKEN={your-bot-token}
60 là một biến vị ngữ được đánh giá trước khi một
# .env
DISCORD_TOKEN={your-bot-token}
02 được thực thi để đảm bảo rằng ____22_______23 xung quanh lệnh gọi
# .env
DISCORD_TOKEN={your-bot-token}
02 là hợp lệ

Trong một ví dụ trước đó, bạn đã làm điều gì đó tương tự để xác minh rằng người dùng đã gửi tin nhắn mà bot xử lý không phải là người dùng bot.

# bot.py
import os

import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord!')

client.run(TOKEN)
7

Tiện ích mở rộng

# .env
DISCORD_TOKEN={your-bot-token}
65 cung cấp một cơ chế sạch hơn và dễ sử dụng hơn để thực hiện loại kiểm tra này, cụ thể là sử dụng các đối tượng
# .env
DISCORD_TOKEN={your-bot-token}
60

Để chứng minh điều này hoạt động như thế nào, giả sử bạn muốn hỗ trợ một lệnh

# .env
DISCORD_TOKEN={your-bot-token}
67 để tạo một kênh mới. Tuy nhiên, bạn chỉ muốn cho phép quản trị viên khả năng tạo kênh mới bằng lệnh này

Trước tiên, bạn sẽ cần tạo vai trò thành viên mới trong quản trị viên. Đi vào bang hội Discord và chọn menu {Tên máy chủ} → Cài đặt máy chủ

Mã chúc mừng sinh nhật con trăn

Sau đó, chọn Vai trò từ danh sách điều hướng bên trái

Mã chúc mừng sinh nhật con trăn

Cuối cùng chọn dấu + bên cạnh ROLES và nhập tên

# .env
DISCORD_TOKEN={your-bot-token}
68 và chọn Save Changes

Mã chúc mừng sinh nhật con trăn

Bây giờ, bạn đã tạo một vai trò

# .env
DISCORD_TOKEN={your-bot-token}
68 mà bạn có thể chỉ định cho những người dùng cụ thể. Tiếp theo, bạn sẽ cập nhật
# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6 thành
# .env
DISCORD_TOKEN={your-bot-token}
60 vai trò của người dùng trước khi cho phép họ bắt đầu lệnh

$ pip install -U python-dotenv
4

Trong

# .env
DISCORD_TOKEN={your-bot-token}
DISCORD_GUILD={your-guild-name}
6, bạn có một hàm
# .env
DISCORD_TOKEN={your-bot-token}
02 mới, được gọi là
# .env
DISCORD_TOKEN={your-bot-token}
74, hàm này nhận một tùy chọn
# .env
DISCORD_TOKEN={your-bot-token}
75 và tạo kênh đó.
# .env
DISCORD_TOKEN={your-bot-token}
74 cũng được trang trí bằng một
# .env
DISCORD_TOKEN={your-bot-token}
60 được gọi là
# .env
DISCORD_TOKEN={your-bot-token}
78

Bạn cũng sử dụng

# .env
DISCORD_TOKEN={your-bot-token}
79 để đảm bảo rằng bạn không tạo kênh trùng tên với kênh hiện có

Nếu bạn chạy chương trình này như hiện tại và nhập

# .env
DISCORD_TOKEN={your-bot-token}
80 vào kênh Discord của mình, thì bạn sẽ thấy thông báo lỗi sau

$ pip install -U python-dotenv
5

# .env
DISCORD_TOKEN={your-bot-token}
81 này nói rằng
# .env
DISCORD_TOKEN={your-bot-token}
82 đã thất bại. Thật không may, lỗi này chỉ in tới
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)
9. Sẽ tốt hơn nếu báo cáo điều này cho người dùng trong kênh. Để làm như vậy, hãy thêm sự kiện sau

$ pip install -U python-dotenv
6

Sự kiện này xử lý một sự kiện lỗi từ lệnh và gửi một thông báo lỗi đầy đủ thông tin trở lại

# .env
DISCORD_TOKEN={your-bot-token}
23 ban đầu của
# .env
DISCORD_TOKEN={your-bot-token}
02 được gọi

Hãy thử lại tất cả và bạn sẽ thấy lỗi trong kênh Discord

Mã chúc mừng sinh nhật con trăn

Tuyệt vời. Bây giờ, để giải quyết vấn đề, bạn cần tự cấp cho mình vai trò quản trị viên

Mã chúc mừng sinh nhật con trăn

Với vai trò quản trị viên, người dùng của bạn sẽ vượt qua

# .env
DISCORD_TOKEN={your-bot-token}
60 và có thể tạo kênh bằng lệnh

Ghi chú. Hãy nhớ rằng để gán vai trò, người dùng của bạn sẽ phải có quyền chính xác. Cách dễ nhất để đảm bảo điều này là đăng nhập bằng người dùng mà bạn đã tạo bang hội.

Khi bạn gõ lại

# .env
DISCORD_TOKEN={your-bot-token}
80, bạn sẽ tạo thành công kênh real-python

Mã chúc mừng sinh nhật con trăn

Ngoài ra, lưu ý rằng bạn có thể chuyển đối số

# .env
DISCORD_TOKEN={your-bot-token}
75 tùy chọn để đặt tên cho kênh theo bất cứ điều gì bạn muốn

Với ví dụ cuối cùng này, bạn đã kết hợp một

# .env
DISCORD_TOKEN={your-bot-token}
02, một sự kiện, một
# .env
DISCORD_TOKEN={your-bot-token}
60 và thậm chí cả tiện ích
$ python bot.py
RealPythonTutorialBot#9643 is connected to the following guild:
RealPythonTutorialServer(id: 571759877328732195)

Guild Members:
 - aronq2
 - RealPythonTutorialBot
1 để tạo một bot Discord hữu ích

Phần kết luận

Xin chúc mừng. Bây giờ, bạn đã học cách tạo bot Discord bằng Python. Bạn có thể tạo bot để tương tác với người dùng trong bang hội do bạn tạo hoặc thậm chí là bot mà người dùng khác có thể mời để tương tác với cộng đồng của họ. Các bot của bạn sẽ có thể phản hồi các tin nhắn và lệnh cũng như nhiều sự kiện khác

Trong hướng dẫn này, bạn đã học những kiến ​​thức cơ bản về cách tạo bot Discord của riêng mình. Bây giờ bạn biết

  • Bất hòa là gì
  • Tại sao
    $ pip install -U python-dotenv
    
    8 rất có giá trị
  • Cách tạo bot Discord trong Cổng thông tin dành cho nhà phát triển
  • Cách tạo kết nối Discord trong Python
  • Cách xử lý các sự kiện
  • Cách tạo kết nối
    # bot.py
    import os
    
    import discord
    from dotenv import load_dotenv
    
    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print(f'{client.user} has connected to Discord!')
    
    client.run(TOKEN)
    
    15
  • Cách sử dụng lệnh bot, kiểm tra và chuyển đổi

Để đọc thêm về thư viện

$ pip install -U python-dotenv
8 mạnh mẽ và đưa bot của bạn lên cấp độ tiếp theo, hãy đọc qua tài liệu phong phú của họ. Ngoài ra, giờ đây bạn đã quen thuộc với API Discord nói chung, bạn có nền tảng tốt hơn để xây dựng các loại ứng dụng Discord khác

Bạn cũng có thể khám phá các khả năng của ChatterBot, Tweepy, InstaPy và Alexa Skills để tìm hiểu thêm về cách bạn có thể tạo bot cho các nền tảng khác nhau bằng Python

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Tạo Bot Discord bằng Python

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Mã chúc mừng sinh nhật con trăn

Gửi cho tôi thủ thuật Python »

Giới thiệu về Alex Ronquillo

Mã chúc mừng sinh nhật con trăn
Mã chúc mừng sinh nhật con trăn

Alex Ronquillo là Kỹ sư phần mềm tại thelab. Anh ấy là một Pythonista cuồng nhiệt, cũng đam mê viết lách và phát triển trò chơi

» Thông tin thêm về Alex


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Mã chúc mừng sinh nhật con trăn

Aldren

Mã chúc mừng sinh nhật con trăn

Jon

Mã chúc mừng sinh nhật con trăn

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng các chuyên gia Pythonistas

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi