Лично я реализовывал всё это через ввод в чат определённых команд. Это можно сделать так. Допустим, вы пишете в чат определённую команду, например "/start-game". Бот это считывает и выполняет вашу функцию по самой игре.
Статистику можно хранить при помощи стандартной библиотеки
sqlite3, и при достижении определённых параметров выдавать ачивку.
Картинки можно отправлять вот так:
image = Image.open('your\\path\\to\\image.jpg') # открытие картинки
with io.BytesIO() as image_binary:
# перевод картинки в байтовый формат
image.save(image_binary, format="JPEG", quality=95)
image_binary.seek(0)
# отправка картинки
await channel.send(file=discord.File(fp=image_binary, filename="image.jpeg"))
Здесь используется
PIL.Image для открытия картинок и работы с ними, а так же
io.BytesIO для перевода картинки в байтовый формат для отправки изображения в сообщении.
Для понимания работы ролей советую посмотреть этот видеоролик:
https://youtu.be/87_3zcv8q5I
И напоследок скажу, что нужно привыкать читать документацию - без этого никуда. Документация по discord.py:
https://discordpy.readthedocs.io/en/latest/api.html