Knight000's Blog

随缘写写,不定时更新

0%

在heroku部署discord.py bot

项目地址

https://github.com/knight000/heroku_discordBOT

Deploy

感谢Toyomukickkick提供的部分源码和支持。

discord.py官方文档

正文(?)

插件加载器

dsc_bot.py里是插件加载器,把写好的插件放在plugins文件夹里面就会自动加载,当然作者不是我..

文件里用到的环境变量之类的可以在app.json里设置,使用环境变量能在开源的前提下保护自己的APIkey和TOKEN,或者让用户直观的自定义一些参数,在插件里请使用os模块的os.environ['变量名']来调用,请参照官方文档或者直接参照项目内的文件。

help指令

discord.py支持自动生成help文档,可以在命令里传入参数help=‘’或者用多行字符串来写,会自动提取为帮助文档,Category的help文档也是,只输入help获取的帮助只有多行字符串的第一行,help [指令]能获取详细的帮助。

Category

设置Category可以让help生成时自动分类,也可以让你开发新指令时不用再次添加bot.add_command,具体请看以下demo。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import discord
from discord.ext import commands
class demo(commands.Cog):
'''
这里是Category的帮助文档
'''
@commands.command(name="test")
async def test(self,ctx):
'''
这里是指令的帮助文档
'''
await ctx.send('Hello World')
return
def setup(bot):
bot.add_cog(demo())

由于Category是类,所以编写的时候请记得传入self

embed

discord不但支持markdown,还支持embed嵌入元素,甚至可以在embed里使用markdown来达成美妙的效果。更多请参考官方文档

1
2
3
embed_box = discord.Embed(title='demo',description='hello world', url='https://www.python.org')
embed_box.set_image(url='https://www.python.org/static/img/[email protected]')
await ctx.send(embed=embed_box)

title:embed的标题

url:点击标题所跳转的链接

set_image:为embed嵌入一张图片

image的一点注意事项

discord当然可以发图,但是这是以BytesIO为形式发送文件,如果是网页上的图片的话,与其用requests爬下来再发送不如直接嵌入在embed里。如果需要发送图片请用BytesIO处理后再发送。

1
2
3
4
import requests
from io import BytesIO
web_image = requests.get(url)
await ctx.send(file=discord.File(BytesIO(web_image.content), filename='demo'))

同步github和heroku的更改并自动部署

首先,进入你的heroku dashboard,点击你的应用然后进入Deploy界面

然后Deployment method选择Github,链接你的Github账户,在App connected to GitHub里选择你存放APP的仓库并链接,并开启Automatic deploys,至此设置完成,当你push到github时heroku也会同步更新,当然也可以切换分支什么的,更多的就等你们自己探索了,毕竟我也只是刚刚接触heroku。