- 原文地址:How to write a Discord bot in Python
- 原文作者:Junpei Shimotsu
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:Starrier
- 校對者:mrcangye、IllllllIIl
如何用 Python 寫一個 Discord 機器人
在本教程中,您將學習如何使用 Python 建立一個簡單的 Discord 機器人。 也許您還不知道什麼是 Discord,本質上它是一項針對遊戲玩家的一種類 Slack(一個雲協作團隊工具和服務)的服務。
在 Discord 上,您可以連線多個伺服器,您一定也注意到這些伺服器有許多機器人。 這些機器人可以做很多事情,從為您播放音樂到簡單的聊天。 我被這些機器人深深吸引,因此決定用 Python 寫一個屬於自己的機器人。 那麼讓我們立刻開始吧!
設定
我們首先要建立一個機器人賬號。 轉到 discordapp.com/developers/… 然後建立一個新的 app。 給您的機器人起一個好聽的名字,並給它配上一張個人資料圖片。
向下滾動並點選"Create Bot User"。 完成後您將得到一個機器人的私密 token。
您也可以點選以顯示機器人的 toke。
永遠不要和任何人分享您的 token,因為他們可能會以此來挾持您的機器人。 在寫完這篇文章後,我會更換 token。
程式碼
現在,開始享受吧。
準備環境
Discord.py (重寫)
現在我們要安裝 discord.py 庫的重寫版本。 pip 上的 discord.py 沒有得到積極維護,因此請安裝庫的重寫版本。
$ python3 -m pip install -U https://github.com/Rapptz/discord.py/archive/rewrite.zip
複製程式碼
檢查您正在使用的 discord.py 版本,
>>> import discord
>>> discord.__version__
'1.0.0a'
複製程式碼
一切已經準備就緒,讓我們開始寫機器人吧。
import discord
from discord.ext import commands
複製程式碼
如果它報 ModuleNotFoundError
或者 ImportError
那麼您的 discord.py 安裝有問題。
bot = commands.Bot(command_prefix='$', description='A bot that greets the user back.')
複製程式碼
命令字首是訊息內容最初呼叫命令所必須包含的內容。
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('------')
複製程式碼
當客戶端準備好從 Discord 中接收資料時,就會呼叫 on_ready()
。
通常是在機器人成功登入後。
現在讓我們為機器人新增一些功能。
@bot.command()
async def add(ctx, a: int, b: int):
await ctx.send(a+b)
@bot.command()
async def multiply(ctx, a: int, b: int):
await ctx.send(a*b)
@bot.command()
async def greet(ctx):
await ctx.send(":smiley: :wave: Hello, there!")
@bot.cmmands()
async def cat(ctx):
await ctx.send("https://media.giphy.com/media/JIX9t2j0ZTN9S/giphy.gif")
複製程式碼
在執行它之前,必須將您的機器人新增到您的伺服器。 這個 OAuth2 url 可以從您的機器人 settings 頁面生成。 轉到 https://discordapp.com/developers,點選您的機器人配置檔案並生成 oAuth2 url。
這是您決定給機器人授予什麼許可權的地方。 對於我們現在的使用情況,我們只需要賦予傳送訊息的許可權即可。
現在,讓我們在命令列中執行以下命令來啟動機器人。
$ python bot.py
複製程式碼
現在我們開始測試機器人。
在建立一個 Discord 機器人時,應該遵循一系列優秀的實踐。 我建議您在這裡 github.com/meew0/disco… 閱讀整個文件。
有個資訊命令。 它應該提供關於機器人的資訊,比如它使用的框架,框架用的是哪個版本以及幫助命令,最重要的一點是,它的開發者是誰。
@bot.command()
async def info(ctx):
embed = discord.Embed(title="nice bot", description="Nicest bot there is ever.", color=0xeee657)
# 在這裡提供關於您的資訊
embed.add_field(name="Author", value="<YOUR-USERNAME>")
# 顯示機器人所服務的數量。
embed.add_field(name="Server count", value=f"{len(bot.guilds)}")
# 給使用者提供一個連結來請求機器人接入他們的伺服器
embed.add_field(name="Invite", value="[Invite link](<insert your OAuth invitation link here>)")
await ctx.send(embed=embed)
複製程式碼
discord.py 會自動生成一個 help
命令。
所以要自定義時,我們首先要刪除預設提供的。
bot.remove_command('help')
複製程式碼
現在我們可以編寫自定義的 help
命令了。請在這裡描述您的機器人。
@bot.command()
async def help(ctx):
embed = discord.Embed(title="nice bot", description="A Very Nice bot. List of commands are:", color=0xeee657)
embed.add_field(name="$add X Y", value="Gives the addition of **X** and **Y**", inline=False)
embed.add_field(name="$multiply X Y", value="Gives the multiplication of **X** and **Y**", inline=False)
embed.add_field(name="$greet", value="Gives a nice greet message", inline=False)
embed.add_field(name="$cat", value="Gives a cute cat gif to lighten up the mood.", inline=False)
embed.add_field(name="$info", value="Gives a little info about the bot", inline=False)
embed.add_field(name="$help", value="Gives this message", inline=False)
await ctx.send(embed=embed)
複製程式碼
恭喜!您剛剛用 Python 建立了一個 Discord 機器人。
託管
目前,機器人只會在您執行指令碼之前線上執行。 因此,如果您希望您的機器人一直執行,您必須線上託管它,或者您也可以在本地託管它。比如在樹莓派(RaspberryPi)。 託管服務範圍很廣,從免費的(Heroku's free tier)到付費的(Digital Ocean)。 我在 Heroku's free tier 上執行我的機器人,到目前為止還沒有遇到任何問題。
原始碼
import discord
from discord.ext import commands
bot = commands.Bot(command_prefix='$')
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('------')
@bot.command()
async def add(ctx, a: int, b: int):
await ctx.send(a+b)
@bot.command()
async def multiply(ctx, a: int, b: int):
await ctx.send(a*b)
@bot.command()
async def greet(ctx):
await ctx.send(":smiley: :wave: Hello, there!")
@bot.command()
async def cat(ctx):
await ctx.send("https://media.giphy.com/media/JIX9t2j0ZTN9S/giphy.gif")
@bot.command()
async def info(ctx):
embed = discord.Embed(title="nice bot", description="Nicest bot there is ever.", color=0xeee657)
# give info about you here
embed.add_field(name="Author", value="<YOUR-USERNAME>")
# Shows the number of servers the bot is member of.
embed.add_field(name="Server count", value=f"{len(bot.guilds)}")
# give users a link to invite thsi bot to their server
embed.add_field(name="Invite", value="[Invite link](<insert your OAuth invitation link here>)")
await ctx.send(embed=embed)
bot.remove_command('help')
@bot.command()
async def help(ctx):
embed = discord.Embed(title="nice bot", description="A Very Nice bot. List of commands are:", color=0xeee657)
embed.add_field(name="$add X Y", value="Gives the addition of **X** and **Y**", inline=False)
embed.add_field(name="$multiply X Y", value="Gives the multiplication of **X** and **Y**", inline=False)
embed.add_field(name="$greet", value="Gives a nice greet message", inline=False)
embed.add_field(name="$cat", value="Gives a cute cat gif to lighten up the mood.", inline=False)
embed.add_field(name="$info", value="Gives a little info about the bot", inline=False)
embed.add_field(name="$help", value="Gives this message", inline=False)
await ctx.send(embed=embed)
bot.run('NDE0MzIyMDQ1MzA0OTYzMDcy.DWl2qw.nTxSDf9wIcf42te4uSCMuk2VDa0')
複製程式碼
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。