cogを使ってbotを動かす方法
以下の前提
2. 以下のディレクトリ, ファイル構成
カレントディレクトリ
cogs mybot.py poetry.lock poetry.toml pyproject.toml
cogsディレクトリ
basiccog.py
code:poetry.py
in-project = true
code:pyproject.toml
name = "mipa-mybot"
version = "0.1.0"
description = "your bot description"
python = ">=3.11"
mipa = "^0.2.1"
build-backend = "poetry.core.masonry.api"
code:mybot.py
import asyncio
from aiohttp import ClientWebSocketResponse
from mipac import Note
from mipa.ext.commands.bot import Bot
# 読み込むCogの名前を格納
INITIAL_EXTENSIONS = [
'cogs.basiccog' # cogsディレクトリのbasiccog.pyを読み込む!
# ,'cogs.othercog' # cogsディレクトリのothercog.pyを読み込む!
]
class MyBot(Bot): # class名を指定!
def __init__(self):
super().__init__()
async def on_ready(self, ws: ClientWebSocketResponse):
#'global', 'main', 'home', 'local', 'hybrid'から繋ぐチャンネルを指定(複数指定OK) print('Logged in ', self.user.username) # 接続できたらそのアカウント名を出力
# INITIAL_EXTENSIONSで指定したものを読み込む
for cog in INITIAL_EXTENSIONS:
await self.load_extension(cog)
if __name__ == '__main__':
bot = MyBot()
asyncio.run(bot.start('wss://<misskey_url>', '<your_token>')
# asyncio.run(bot.start('wss://misskey.io/streaming', 'xfsafwefawfewfiwii141')
code:cogs/basiccog.py
import asyncio
from mipa.ext import commands
from mipa.ext.commands.bot import Bot
from mipa.ext.commands.context import Context
class BasicCog(commands.Cog):
def __init__(self, bot: Bot) -> None:
self.bot = bot
# メンションされ、「hello」とだけ書かれてたらこのメソッドを実行
# 「@xxxx hello」みたいなやつ
@commands.mention_command(text='hello')
async def hello(self, ctx: Context):
# 「hello! <メンションしたユーザー名>」で返信
await ctx.message.api.action.reply(f'hello! {ctx.message.author.username}')
# タイマーのサンプル。メンションされ、「<数字> second timer」と書かれてたらこのメソッドを実行
# 「@xxx 100 second timer」みたいなやつ(返信して、100秒後にさらにリプライする)
@commands.mention_command(regex=r'(\d+) second timer')
async def timer(self, ctx: Context, time: str):
await ctx.message.api.action.reply(f'That\'s {time} seconds. Okay, start')
await asyncio.sleep(int(time))
await ctx.message.api.action.reply(f'{time} seconds have passed!')
# セットアップ
async def setup(bot: Bot):
await bot.add_cog(BasicCog(bot))