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:

hello.py
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.

basic_ext.py
def setup(bot):
    print('I am being loaded!')

def teardown(bot):
    print('I am being unloaded!')