コンテンツにスキップ

コミュニティプラグイン

Plugin(コミュニティプラグイン)は、mixi2 のコミュニティにインストールして動作する拡張型アプリケーションです。Bot の機能に加え、コミュニティ固有のイベント受信や API 操作が行えます。

項目BotPlugin
提供対象ユーザーユーザー + コミュニティ
受信できるイベントリプライ・メンション・DMリプライ・メンション・DM・コミュニティ内のポスト・メンバー参加/退出・インストール/アンインストール
使える API基本 API基本 API + コミュニティ操作 API
インストール不要コミュニティ管理者がインストール(最大 10 コミュニティ)

Plugin は Bot のすべての機能を持ちつつ、コミュニティ固有の機能も利用できるアプリケーションです。コミュニティに対してポストしたい、コミュニティメンバーに DM を送りたい、コミュニティのタイムラインを取得したいといった用途には Plugin を選択してください。

Requirement は Plugin 固有の概念で、Plugin がコミュニティに要求するパーミッションと受信したいイベントのセットです。

コミュニティに対する操作権限です。使用する API に対応したパーミッションを宣言する必要があります。

パーミッション説明対応 API
Community.Post.Readコミュニティのタイムラインを閲覧できますgetCommunityTimeline
Community.Post.Createコミュニティへポストを投稿できますcreatePostcommunityId 指定時)
Community.Post.Restrictコミュニティのポストを非表示にできますrestrictCommunityPost
Community.MemberList.Readコミュニティのメンバー一覧を取得できますgetCommunityMemberList
Community.Post.Stamp.Createコミュニティのポストにスタンプを付与できますaddStampToPost
Community.Member.DirectMessage.Createコミュニティのメンバーに DM を送信できますsendDirectMessageToCommunityMember

受信したいイベントを宣言します。宣言していないイベントは配信されません。

イベント説明
Reaction.Post.Replied作成したポストにリプライが付いたとき
Reaction.Post.Mentionedメンション付きのポストが作成されたとき
Reaction.DirectMessage.ReceivedDM を受け取ったとき
Community.Post.Createdインストール済みコミュニティにポストが作成されたとき
Community.Member.Joinedインストール済みコミュニティにメンバーが参加・退出したとき

コミュニティメンバー変更イベント(CommunityMemberChangedEvent

Section titled “コミュニティメンバー変更イベント(CommunityMemberChangedEvent)”

コミュニティにメンバーが参加・退出したときに発生します(Requirement: Community.Member.Joined)。

import { EventRouter } from 'mixi2-js/helpers';
import { EventType, EventReason } from 'mixi2-js';
const router = new EventRouter();
router.on(EventType.COMMUNITY_MEMBER_CHANGED, async (event) => {
const e = event.communityMemberChangedEvent!;
const reason = e.eventReasonList[0];
if (reason === EventReason.COMMUNITY_MEMBER_JOINED) {
console.log(`${e.member?.name}${e.community?.name} に参加しました`);
// 参加メンバーに DM で挨拶を送る
await client.sendDirectMessageToCommunityMember({
receiverId: e.member!.userId,
communityId: e.community!.communityId,
text: 'コミュニティへようこそ!',
});
} else if (reason === EventReason.COMMUNITY_MEMBER_LEFT) {
console.log(`${e.member?.name}${e.community?.name} を退出しました`);
}
});
フィールド説明
eventReasonListEventReason[]イベントが発生した理由
memberUser | null参加・退出したユーザー
communityCommunity | null対象コミュニティ
EventReason説明
COMMUNITY_MEMBER_JOINED6コミュニティにメンバーが参加した
COMMUNITY_MEMBER_LEFT7コミュニティからメンバーが退出した

コミュニティプラグイン管理イベント(CommunityPluginManagedEvent

Section titled “コミュニティプラグイン管理イベント(CommunityPluginManagedEvent)”

Plugin がコミュニティにインストール・アンインストールされたときに発生します。Requirement 宣言不要です。

router.on(EventType.COMMUNITY_PLUGIN_MANAGED, async (event) => {
const e = event.communityPluginManagedEvent!;
const reason = e.eventReasonList[0];
if (reason === EventReason.COMMUNITY_PLUGIN_INSTALLED) {
console.log(`${e.community?.name} に Plugin がインストールされました`);
// 初期化処理
} else if (reason === EventReason.COMMUNITY_PLUGIN_UNINSTALLED) {
console.log(`${e.community?.name} から Plugin がアンインストールされました`);
// クリーンアップ処理
}
});
フィールド説明
eventReasonListEventReason[]インストール/アンインストール
communityCommunity | null対象コミュニティ
EventReason説明
COMMUNITY_PLUGIN_INSTALLED9Plugin がコミュニティにインストールされた
COMMUNITY_PLUGIN_UNINSTALLED10Plugin がコミュニティからアンインストールされた

以下のサンプルコードは API クライアント と同じクライアント初期化が完了している前提で記述しています。

インストール済みコミュニティの一覧を取得する

Section titled “インストール済みコミュニティの一覧を取得する”

Plugin がインストールされているコミュニティと各バージョン情報を取得します。

const result = await client.getCommunitiesUsingApplication();
for (const item of result.communitiesUsingApplication) {
console.log(item.community?.name, '- バージョン:', item.applicationVersionId);
}
// 次のページを取得
if (result.nextCursor) {
const next = await client.getCommunitiesUsingApplication({ cursor: result.nextCursor });
}
フィールド必須説明
cursorstring-ページング用カーソル(任意)
フィールド説明
communitiesUsingApplicationCommunityUsingApplication[]インストール済みコミュニティ一覧
applicationVersionsApplicationVersion[]各コミュニティのバージョン情報一覧
nextCursorstring?次ページ取得用カーソル

コミュニティのタイムラインを取得する

Section titled “コミュニティのタイムラインを取得する”

インストール済みコミュニティのタイムライン(ポスト一覧)を取得します(Requirement: Community.Post.Read)。

const posts = await client.getCommunityTimeline({ communityId: 'YOUR_COMMUNITY_ID' });
// 古いページを取得する(ページング)
const olderPosts = await client.getCommunityTimeline({
communityId: 'YOUR_COMMUNITY_ID',
untilCursor: posts[posts.length - 1]?.postId,
});
フィールド必須説明
communityIdstringタイムラインを取得するコミュニティ ID
untilCursorstring-指定したポスト ID より古いポストを返します(指定ポストは含まない)
sinceCursorstring-指定したポスト ID より新しいポストを返します(指定ポストは含まない)

コミュニティのメンバー一覧を取得する

Section titled “コミュニティのメンバー一覧を取得する”

インストール済みコミュニティのメンバー一覧を取得します(Requirement: Community.MemberList.Read)。

let cursor: string | undefined;
do {
const result = await client.getCommunityMemberList({
communityId: 'YOUR_COMMUNITY_ID',
paginationCursor: cursor,
});
console.log('members:', result.members.map(m => m.name));
cursor = result.nextPaginationCursor;
} while (cursor);
フィールド必須説明
communityIdstringメンバー一覧を取得するコミュニティ ID
paginationCursorstring-ページング用カーソル(任意)
フィールド説明
membersUser[]コミュニティメンバーの一覧
nextPaginationCursorstring?次ページ取得用カーソル

コミュニティのポストを非表示にする

Section titled “コミュニティのポストを非表示にする”

指定したポストをコミュニティのタイムラインから非表示にします(削除ではありません)(Requirement: Community.Post.Restrict)。

await client.restrictCommunityPost({ postId: 'POST_ID' });
フィールド必須説明
postIdstring非表示にするポスト ID

コミュニティメンバーに DM を送信する

Section titled “コミュニティメンバーに DM を送信する”

インストール済みコミュニティのメンバーにダイレクトメッセージを送信します(Requirement: Community.Member.DirectMessage.Create)。

// テキスト DM
await client.sendDirectMessageToCommunityMember({
receiverId: 'USER_ID',
communityId: 'COMMUNITY_ID',
text: 'こんにちは!',
});
// メディア付き DM
await client.sendDirectMessageToCommunityMember({
receiverId: 'USER_ID',
communityId: 'COMMUNITY_ID',
mediaIds: ['MEDIA_ID'],
});

text または mediaIds のいずれかは必須です。

フィールド必須説明
receiverIdstring受信者のユーザー ID
communityIdstring受信者が所属するコミュニティ ID
textstring本文テキスト(text または mediaIds が必須)
mediaIdsstring[]添付メディア ID(最大 4 件)
postIdstring-引用するポスト ID(任意)

コミュニティスタンプを取得する

Section titled “コミュニティスタンプを取得する”

インストール済みコミュニティのスタンプを取得します。

const result = await client.getStamps({
communityIds: ['COMMUNITY_ID'],
});
for (const set of result.communityStampSets) {
console.log('コミュニティ:', set.communityId);
for (const stamp of set.stamps) {
console.log(' -', stamp.stampId, stamp.url);
}
}
// コミュニティスタンプをポストに付与(Requirement: Community.Post.Stamp.Create)
await client.addStampToPost('POST_ID', result.communityStampSets[0]!.stamps[0]!.stampId);

コミュニティのタイムラインにポストします(Requirement: Community.Post.Create)。

const post = await client.createPost({
text: 'コミュニティへの投稿です!',
communityId: 'COMMUNITY_ID',
});