如何使用Python製作Discord機器人迷因產生器
目錄
- 簡介
- 第一步:匯入套件
- 第二步:建立機器人
- 第三步:建立 Discord Bot
- 第四步:設定機器人權限
- 第五步:設定機器人回應功能
- 第六步:獲取 Reddit Memes
- 第七步:創建回應字串
- 第八步:設定發送 Meme 功能
- 第九步:設定延遲發送功能
- 完成
😃 建立 Discord Meme Generator 機器人教學
歡迎大家來到 J Code,今天我們要一起建立一個 Meme Generator Discord 機器人。這個機器人能夠從 Reddit 的「memes」版面匯入 Meme 圖片,然後在我們的伺服器上發佈。讓我們開始吧!
簡介
這篇教學將帶領您進行 Meme Generator Discord 機器人的建立過程。我們將使用 Python 來編寫機器人的程式碼,並使用 Discord API 和 Reddit API 來獲取 Meme 圖片。在本教學中,我們將逐步引導您完成每個步驟,以便您能夠理解並一起建立您自己的 Meme Generator Discord 機器人。
第一步:匯入套件
在開始編寫程式碼之前,我們需要先匯入所需的套件。我們將匯入以下套件:
import discord
import random
import time
import requests
import json
discord
:這是 Discord API 的 Python 套件,可用於建立和管理 Discord 機器人。
random
:這是 Python 內建的隨機函數套件,用於從列表中選取隨機元素。
time
:這是 Python 內建的時間函數套件,用於建立延遲發送功能。
requests
:這是 Python 常用的 HTTP 庫,用於向 Reddit API 發送請求。
json
:這是 Python 內建的 JSON 函數套件,用於處理 JSON 格式的數據。
第二步:建立機器人
現在,我們需要建立 Discord 機器人的物件。您可以使用 Discord 開發者門戶來建立一個新的應用程式,並將其轉換為機器人。
client = discord.Client()
client
是我們的 Discord 機器人物件,我們將使用它來設定機器人的回應功能。
第三步:建立 Discord Bot
在 Discord 開發者門戶中,您需要建立一個新的應用程式,並將其轉換為機器人。這樣,您將獲得一個機器人的金鑰,這個金鑰將用於機器人的驗證和設定。
第四步:設定機器人權限
在 Discord 開發者門戶中,您需要為您的機器人設定權限。這些權限將決定您的機器人可以在伺服器中進行哪些操作。
以下是我們需要為機器人設定的權限:
- 檢視頻道:讓機器人能夠檢視伺服器中的頻道。
- 發送訊息:讓機器人能夠在頻道中發送訊息。
- 連結:允許機器人在訊息中發送連結。
- 貼上訊息:允許機器人貼上訊息到頻道中。
第五步:設定機器人回應功能
我們將設定機器人回應指定關鍵字的功能。當使用者在 Discord 頻道中發送特定關鍵字時,機器人將回覆一個隨機的自定義問候字串。
首先,我們需要建立一個包含自定義問候字串的列表。
greetings = ["嗨!", "你好!", "哈囉!", "早安!", "午安!"]
接下來,我們需要建立一個異步事件函數,負責偵測使用者的訊息。
@client.event
async def on_message(message):
if message.author != client.user: # 確保機器人不回應自己的訊息
if message.content.upper() == "HEY CISCO": # 檢查關鍵字
greeting = choose_randomly_from_list(greetings) # 從列表中隨機選擇問候字串
await message.channel.send(greeting + " " + message.author.mention) # 回覆問候
on_message
函數是一個異步事件函數,每當有新的訊息進來時,就會觸發這個函數。
- 我們使用
if
條件判斷來檢查是否為特定關鍵字的訊息。
- 如果收到特定關鍵字的訊息,我們將從問候列表中隨機選擇一個問候字串,並使用
message.Channel.send
函數將回覆發送到原始發送訊息的頻道中。
第六步:獲取 Reddit Memes
我們將使用 Reddit API 來從「memes」版面匯入 Meme 圖片。在發送 memes 的功能中,我們將使用一個 API,該 API 提供了一個可以獲取 memes 的端點 URL。
以下是我們從 Reddit API 中獲取 Meme 的程式碼:
def fetch_memes():
subreddit = "memes" # 要求的 subreddit
url = f"https://api.reddit.com/r/{subreddit}/new" # Reddit API 使用的端點 URL
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}) # 發送 GET 請求
if response.status_code == 200: # 確認請求成功
data = response.json() # 將回應轉換為 JSON 格式
posts = data["data"]["children"] # 提取回應中的 Meme 列表
memes_list = [] # 用於存放 Meme 圖片的列表
for post in posts:
if "media" in post["data"] and post["data"]["media"]["type"] == "video":
# 資訊中有影片
video_url = post["data"]["media"]["reddit_video"]["fallback_url"]
memes_list.append(video_url)
else:
# 只有圖片
image_url = post["data"]["url"]
memes_list.append(image_url)
return memes_list
fetch_memes
函數是用於從 Reddit API 獲取 Meme 的功能。
- 我們使用
requests.get
函數發送 GET 請求,並將回應轉換為 JSON 格式。
- 我們從回應中提取出 Meme 圖片的 URL,並將其存放在一個列表中。
第七步:創建回應字串
現在,我們需要創建一個字串變數,用於存放我們的回應訊息。
def create_response_string(memes_list):
response_string = ""
for meme_url in memes_list:
response_string += meme_url + "\n"
return response_string
create_response_string
函數是用於創建我們的回應訊息的功能。
- 我們將遍歷 Meme 圖片的列表,並將每個 URL 添加到回應字串中。
第八步:設定發送 Meme 功能
我們將在機器人的回應功能中添加「send memes」的功能。當使用者在 Discord 頻道中發送「send memes」時,機器人將從 Reddit API 獲取 Meme,然後將其發送到伺服器上。
@client.event
async def on_message(message):
if message.author != client.user:
if message.content.upper() == "SEND MEMES":
old_list = memes_list.copy() # 暫存原始的 Meme 列表
memes_list = fetch_memes() # 更新 Meme 列表
for meme_url in memes_list:
if meme_url not in old_list:
await message.channel.send(meme_url)
time.sleep(5) # 延遲 5 秒
- 我們在
on_message
函數中添加了另一個條件判斷,以檢查是否有特定關鍵字的訊息。
- 如果收到「send memes」的訊息,則使用
fetch_memes
函數更新 Meme 列表。
- 接著,我們遍歷新的 Meme 列表,將不在舊列表中的 Meme 圖片發送到伺服器上。
第九步:設定延遲發送功能
為了使訊息更好地呈現在伺服器上,我們將為發送 Meme 的功能添加延遲發送功能。這樣可以避免一次發送過多的 Meme 圖片。
@client.event
async def on_message(message):
if message.author != client.user:
if message.content.upper() == "SEND MEMES":
old_list = memes_list.copy()
memes_list = fetch_memes()
for meme_url in memes_list:
if meme_url not in old_list:
await message.channel.send(meme_url)
time.sleep(5)
- 在這裡,我們使用
time.sleep
函數來使程式暫停 5 秒。
- 這樣,在發送每個 Meme 圖片之間,將有 5 秒的延遲。
完成
恭喜!您已經成功建立了一個 Meme Generator Discord 機器人。現在,您可以在 Discord 頻道中使用關鍵字來觸發各種功能,包括使用者問候和獲取 Reddit Meme 圖片。
希望這篇文章對您有所幫助。謝謝大家的觀看,希望您在下一篇文章中再見!