Ekstensi¶
Ada kalanya ketika anda membuat bot dan anda ingin mengeksten fungsi bot ketika run-time dan melakukan unload atau reload kode (biasa dipanggil hot-reloading). Framework perintah/command datang dengan kemampuan ini didalam modul, konsep ini dipanggil dengan nama ekstensi.
Introduksi¶
Sebuah ekstensi adalah sebuah file python dengan entry point bernama setup
. Setup ini haruslah merupakan fungsi Python biasa (bukan coroutine). Fungsi ini menerima satu parameter -- Bot
yang memuat ekstensinya.
Contoh ekstensi adalah seperti ini:
from discord.ext import commands
@commands.command()
async def hello(ctx):
await ctx.send(f'Hello {ctx.author.display_name}.')
def setup(bot):
bot.add_command(hello)
Di contoh ini kita akan menyiapkan perintah simpel, dan ketika ekstensi ini dimuat perintah akan ditambahkan ke bot. Langkah akhirnya sekarang adalah memuat ekstensinya dengan cara Bot.load_extension()
. Untuk memuat extensi kita memanggil fungsi dengan cara bot.load_extension('hello')
.
Cogs
Ekstensi biasanya digunakan bersamaan dengan cogs. Untuk membaca lebih lanjut, mohon baca dokumentasi Cogs.
Catatan
Direktori ekstensi mirip dengan mekanisme import Python. Maksudnya adalah jika ada folder, maka harus terkualifikasi dengan titik (dot-qualified). Contohnya untuk ekstensi di plugins/hello.py
maka kita gunakan string plugins.hello
.
Memuat ulang¶
Ketika anda membuat perubahan dan ingin memuat ulang ekstensinya, modul ini mempunyai fungsi untuk membantu anda, Bot.reload_extension()
.
>>> bot.reload_extension('hello')
Ketika ekstensinya dimuat ulang, semua perubahan yang anda buat akan diproses. Ini sangat berguna jika anda ingin menambah atau menghapus fungsi tanpa merestart bot. Jika terjadi kesalahan ketika memuat ulang ekstensi, bot tidak akan kenapa-napa.
Membersihkan¶
Walaupun sangat jarang, terkadang ekstensi butuh melakukan pembersihan atau tau ketika ekstensinya sedang diurungkan. Untuk kasus seperti ini, ada entry point lain bernama teardown
yang mirip dengan setup
tetapi dipanggil ketika ekstensi sedang diurungkan.
def setup(bot):
print('I am being loaded!')
def teardown(bot):
print('I am being unloaded!')