Tencent RTC Chat で Discord のようなプラットフォームを構築する

10 分読む
Feb 18, 2025

シナリオ概要

Discordは、コミュニティ向けに設計された無料のオンラインリアルタイムメッセージングアプリおよびデジタル配信プラットフォームです。ユーザーは、ゲーム、教育、ビジネス分野で互いにメッセージ、画像、動画、および音声を通じてコミュニケーションを取ることができます。

Discord Community for Real-Time Communication and Digital Distribution

Discord is a free

Discordの概念

  • サーバー: Discordでは、通常のコミュニケーションソフトウェアのグループとは異なる、グループチャットの一種であるサーバー(コミュニティに似ています)が存在し、サーバーの所有者はサーバー内に独自のコミュニティを作成できます。
  • チャンネル: サーバー内でチャットチャンネルを作成でき、音声チャンネルやテキストチャンネルがあります。音声チャンネルは、ゲームのブロードキャストやチャットなどに使用されます。チャンネルは、アイデンティティグループと統合されたさまざまな権限を設定でき、Discordのコミュニティシステムをより多様化します。
  • スレッド: ユーザーは特定のトピックについてスレッドで議論できます。

適用製品

Tencent RTCチャット

基本的な統合ガイドライン

チャットアプリの作成

このチュートリアルはチャットに基づいています。したがって、コンソールでアプリを作成する必要があります。

Tutorial on creating a chat-based application using Tencent RTC console. Step-by-step guide includes clicking 



アプリが正常に作成された後、チャットコンソールの 基本情報ページでアプリの基本情報を表示できます。

関連する設定と機能の理解

Discordの機能を実装するためにチャットを使用するには、あらかじめチャットに関連する基本概念や、今後のチュートリアルで言及される適切な用語を理解する必要があります。これには以下が含まれますが、これに限定されません:

  • SDKAppID: チャットは各アプリにSDKAppIDを割り当てます。アプリがコンソールで作成された後、アプリの詳細ページでSDKAppIDを表示でき、チャットSDKを初期化し、ユーザーログインチケットを計算する際に使用します。詳細については、UI SDK 初期化およびログイン
  • キー: アプリのキーはチャットコンソールのアプリ詳細ページで表示でき、ユーザーのSDKログインチケットを計算するために使用されます。
  • ユーザーアカウント: チャットアカウントを持つユーザーのみがチャットにログインできます。ユーザーがクライアントSDKを介して ログインに成功すると、チャットバックエンドは自動的にユーザーのチャットアカウントを作成します。さらに、チャットが提供するサーバーAPIを使用してユーザーをチャットのユーザーシステムにインポートすることもできます
  • グループ: 現在、チャットは異なるシナリオのために 5種類のグループ を提供しており、ユーザーはメッセージの送受信が可能です。
  • Webhook構成: クライアントとサーバーAPIをチャットが提供するものと統合することで、特定のビジネスロジックがトリガーされたときにチャットが自動的に必要な情報をあなたのサーバーに返します。あなたが行う必要があるのは、チャットコンソールのWebhook構成モジュールで関連する構成を完了することだけです。チャットはさまざまなWebhook構成を提供し、Webhookイベントの高い信頼性を確保します。Webhookを使用して、さまざまなカスタム要件を実装できます。
  • カスタムフィールド: デフォルトで、チャットは開発者がほとんどのニーズを満たすフィールドを提供します。また、ユーザーの拡張フィールドのニーズを満たすために、各モジュールに対して以下のカスタムフィールドを提供します:

注:

カスタムフィールドを使用するには、コンソールで構成し、その後SDK/APIを介して読み書きできます。

クライアントとサーバーSDKの統合



Discord関連の機能を実装するには、チャットSDKを統合する必要があります。チャットは多様で使いやすいSDKとサーバーAPIを提供しています。同じSDKAppIDでアプリにログインすると、メッセージがクライアント間で同期されます。ビジネス要件シナリオと技術スタックに応じて適切なSDKを選択してください。

シナリオ特有の実装

上記の図のように、Discordの機能にはサーバー、チャンネル、スレッドが含まれます。異なるサーバーは異なるコンテンツに使用されます。たとえば、「Honor of Kings」サーバーや「Game for Peace」サーバーがあります。サーバー内には、テキストチャンネル、音声チャンネル、通知チャンネルなどのさまざまなタイプのチャンネルを作成できます。ユーザーはチャンネル内で互いにコミュニケーションを取ります。特定のトピックについてさらにアイデアがある場合は、スレッドを作成して議論できます。以下では、これらの主要なDiscord機能をチャットを通じてどのように実装するかを順次紹介します。

注:

コードデモでは、Androidクライアント(Java SDK)を例として使用します。他のSDKエディションのAPI呼び出しについては、統合ソリューション(UIなし)をご覧ください。

サーバー

サーバーの作成

分析により、Discordサーバーリストには以下の特徴が見つかりました:

  1. サーバーには大量のユーザーが参加できます。
  2. ユーザーは実際にサーバー内で互いにコミュニケーションを取るわけではなく、代わりにサーバー内のチャンネルやスレッドでのみチャットを行います。
  3. サーバー内の過去のチャットメッセージは、ローミングサーバーに保存する必要があります。
  4. ユーザーはサーバーに自由にアクセスできます。
  5. サーバー内にチャンネルを作成できます。

チャットは5種類のグループを提供していますが、コミュニティグループのみがDiscordサーバーの特徴を満たしています。チャットコミュニティグループでは、ユーザーは自由に参加・退出でき、最大100,000人のメンバーをサポートし、メッセージ履歴を保存します。グループに参加するには、ユーザーはグループIDを検索して申請を送信する必要があり、申請はユーザーがグループに参加する前に管理者によって承認される必要はありません。

サーバー(グループ)を作成するには、createGroup APIを使用できます。グループタイプはコミュニティであり、setSupportTopictrueに設定する必要がありますので、サーバー内にチャンネルを作成できます。以下はサンプルコードです:

V2TIMGroupInfo  groupinfo = new V2TIMGroupInfo();
groupinfo.setGroupName("テストサーバー");
groupinfo.setSupportTopic(true);
// 初期グループメンバー
List<V2TIMCreateGroupMemberInfo> memberList = new LinkedList<V2TIMCreateGroupMemberInfo>();
// サーバーのプロフィール写真などのその他の設定
V2TIMManager.getGroupManager().createGroup(groupinfo, memberList, new V2TIMValueCallback<String>() {
            @Override
            public void onError(int i, String s) {
                // 作成に失敗しました
            }

            @Override
            public void onSuccess(String s) {
                // サーバーが正常に作成され、サーバーIDが返されます。
            }
});

APIが正常に呼び出されると、onSuccessコールバックにサーバーIDが返され、後でチャンネルを作成する際に使用されます。

注意:チャットが提供するサーバー作成APIも使用できます。重要なパラメータは以下の通りです:

{
    "Type": "Community", // グループタイプ(必須)
    "Name": "TestCommunityGroup", // グループ名(必須)
    "SupportTopic": 1// トピックオプションがサポートされているかどうか。 有効な値: `1`: はい; `0`: いいえ。
}

###### Server list

There is a list of servers that the current user has joined on the far left of Discord. For the community scenario, Chat provides a dedicated API for querying the server list.

```java
V2TIMManager.getGroupManager().getJoinedCommunityList(new V2TIMValueCallback<List<V2TIMGroupInfo>>() {
            @Override
            public void onSuccess(List<V2TIMGroupInfo> v2TIMGroupInfos) {
                // The server list is got successfully, and the basic information of the server list is provided in the returned `List<V2TIMGroupInfo>`.
            }

            @Override
            public void onError(int i, String s) {
              // Failed to get the service list.
            }
});

返された V2TIMGroupInfo は基本的なサーバー情報を提供します。ただし、返されたサーバー情報には未読メッセージ数やカスタムステータスなどの情報は含まれていません。Discordと同様の効果を得るためには、サーバーリストの未読メッセージ数を実装するために、チャットが提供する他のAPIを使用する必要があります。これは文書の後半で議論されます。

サーバーカテゴリ

サーバーが作成されると、デフォルトのカテゴリが作成されます。サーバーが作成された後、新しいカテゴリを作成できます。チャットでは、サーバーは本質的にコミュニティです。したがって、サーバータイプ機能を実装するためにコミュニティグループにカスタムフィールドを設定できます。カスタムグループフィールドを使用するには、以下の手順を実行してください:

1. コンソールでカスタムフィールド key を有効にします。

2. クライアントSDKまたはサーバーAPIを使用してカスタムフィールドを読み書きします。

カスタムグループフィールドを設定するには、サーバーAPI およびクライアントSDKを使用します。

注意:

コミュニティグループ機能はUltimateエディションでのみ利用可能です。コミュニティグループのカスタムフィールドを設定する前に、Ultimateエディションを購入する必要があります。

サーバーの未読メッセージ数とカスタムステータスの表示



前述のように、参加しているサーバーのリストを取得するAPIは、未読メッセージ数やサーバーステータスなどの情報を返しません。このデータを取得するだけでなく、このデータの変化を監視して、クライアントUIをタイムリーに更新する必要があります。サーバーはチャットコミュニティグループによって実装されているため、コミュニティグループはチャット内で会話を生成しないため、すべての公開およびプライベートチャンネルの会話の未読メッセージの合計をカウントする必要があります。公開チャンネルの未読メッセージ数を取得するには、getUnreadCount APIを使用し、プライベートチャンネルの未読メッセージ数を取得するには、getConversation APIを使用します(プライベートチャンネルは作業グループによって実装されています)。

// 公開チャンネル
List<String> conversationIDList = new LinkedList();
conversationIDList.add("GROUP_$GROUPID");
V2TIMManager.getConversationManager().getConversationList(conversationIDList, new V2TIMValueCallback<List<V2TIMConversation>>() {
            @Override
            public void onError(int i, String s) {
                // サーバーの会話情報の取得に失敗しました
            }

            @Override
            public void onSuccess(V2TIMConversationList List<V2TIMConversation>) {
               // サーバーの会話情報を正常に取得しました
            }
});
// プライベートチャンネル
V2TIMManager.getGroupManager().getTopicInfoList(groupID, topicIDList, new V2TIMValueCallback<List<V2TIMTopicInfoResult>>() {
                @Override
                public void onSuccess(List<V2TIMTopicInfoResult> v2TIMTopicInfoResults) {

                }

                @Override
                public void onError(int i, String s) {
                }
});

サーバーのカスタムステータス機能を実装するには、setConversationCustomData APIを使用してカスタムサーバー会話データを設定できます。

List<String> conversationIDList = new LinkedList();
String customData = "忙しい"
V2TIMManager.getConversationManager().setConversationCustomData(conversationIDList, customData, new V2TIMValueCallback<List<V2TIMConversationOperationResult>>() {
            @Override
            public void onSuccess(List<V2TIMConversationOperationResult> v2TIMConversationOperationResults) {
                // カスタムグループ会話データが正常に設定されました
            }

            @Override
            public void onError(int i, String s) {
                // カスタムグループ会話データの設定に失敗しました
            }
});

サーバー会話に関連するデータが変更されると、クライアントはUI表示を更新する必要があります。サーバー会話の変更をリッスンするために、チャットは対応するイベントリスナー機能addConversationListenerを提供します。このコールバック関数は、以下のケースでトリガーされます:

1. サーバーメッセージが追加、削除、または変更された。

2. サーバーメッセージの未読数が変更された。

3. カスタムサーバー情報が変更された。

4. サーバーがトップに固定された。

5. サーバーのメッセージ受信設定が変更された。

6. サーバーのマークが変更された。

7. サーバーグループが変更された。

8. ...

V2TIMConversationListener conversationLister = new V2TIMConversationListener() {
            @Override
            public void onSyncServerStart() {
            }

            @Override
            public void onSyncServerFinish() {
            }

            @Override
            public void onSyncServerFailed() {
            }

            @Override
            public void onNewConversation(List<V2TIMConversation> conversationList) {
            }

            @Override
            public void onConversationChanged(List<V2TIMConversation> conversationList) {
            }
            @Override
            public void onTotalUnreadMessageCountChanged(long totalUnreadCount) {
            }

            @Override
            public void onConversationGroupCreated(String groupName, List<V2TIMConversation> conversationList) {
            }

            @Override
            public void onConversationGroupDeleted(String groupName) {
            }

            @Override
            public void onConversationGroupNameChanged(String oldName, String newName) {
            }

            @Override
            public void onConversationsAddedToGroup(String groupName, List<V2TIMConversation> conversationList) {、
            }

            @Override
            public void onConversationsDeletedFromGroup(String groupName, List<V2TIMConversation> conversationList) {
            }
}
V2TIMManager.getConversationManager().addConversationListener(conversationLister);

要約すると、getJoinedCommunityList および getConversationList API、および addConversationListener コールバックを使用して、Discordのサーバーリスト表示機能を実装できます。

チャンネル

サーバー内に複数のチャンネルを作成できます。以下の図に示すように、チャンネルはサーバーの下に作成され、異なるカテゴリに配置できます。



ユーザーは他の人をチャンネルに招待し、チャンネルの基本設定を変更できます。ユーザーはチャンネル内でほとんどのチャットを行うため、チャンネル機能はDiscordにとって極めて重要です。Discordのチャンネル機能は、チャット内のトピック機能に対応しています。チャットのコミュニティグループは、グループ内にトピックを作成する機能を提供します。

デフォルトチャンネル

サーバーが作成されると、Discordはサーバーのために4つのデフォルトチャンネルを作成します。チャットでも同様の機能を実装できます。プロセスは以下の通りです:

1. グループ作成後 webhookを介して、サーバーが正常に作成されたことをビジネスサーバーに通知します。

2. ビジネス側は、作成されたグループがコミュニティグループであるかどうかを判断し、他のグループに関連するビジネスに影響を与えないようにします。

3. サーバー上にトピックを作成し、サーバー属性に基づいています。

サーバー上のトピックを作成するためのパラメータは以下の通りです:

{
    "GroupId": "@TGS#_@TGS#cQVLVHIM62CJ", // トピックのグループID(必須)
    "TopicId": "@TGS#_@TGS#cQVLVHIM62CJ@TOPIC#_TestTopic", // カスタムトピックID(オプション)
    "TopicName": "TestTopic", // トピック名(必須)
    "From_Account": "1400187352", // トピックを作成するメンバー
    "CustomString": "これはカスタム文字列です",// カスタム文字列
    "FaceUrl": "http://this.is.face.url", // (オプション)トピックプロフィール写真のURL
    "Notification": "これはトピック通知です", // (オプション)トピック通知
    "Introduction": "これはトピックの紹介です" // (オプション)トピックの紹介
}

チャンネルの作成

Discordクライアントでは、ユーザーは異なるチャンネルカテゴリの下にチャンネルを作成できます。以下の図に示すように:

Discordでチャンネルを作成することは、チャットのコミュニティグループ内でトピックを作成することに相当します。チャットでトピックを作成する際に、カテゴリとトピックの基本情報を設定できます。



createTopicInCommunity APIを使用して関連機能を実装できます。

String groupID = "サーバーID"
V2TIMTopicInfo info = new V2TIMTopicInfo();
info.setCustomString("{'categray':'ゲーム','type':'テキスト'}") // チャンネルカテゴリとタイプを設定
// `V2TIMTopicInfo` の基本情報を設定
V2TIMManager.getGroupManager().createTopicInCommunity(groupID, info, new V2TIMValueCallback<String>() {
            @Override
            public void onSuccess(String s) {
                // チャンネルが正常に作成されました
            }

            @Override
            public void onError(int i, String s) {
                // チャンネルの作成に失敗しました
            }
});

チャンネルを作成する際に、V2TIMTopicInfo メソッドを呼び出してチャンネル情報を設定し、setCustomString APIを呼び出してチャンネルカテゴリとタイプを設定できます。



チャンネルを作成する際に、プライベートチャンネルであるかどうかを指定できます。プライベートチャンネルは一般的なチャンネルとは異なります:

1. ユーザーはサーバーに参加した後、プライベートチャンネルには参加しません。

2. ユーザーはサーバー管理者から招待される場合にのみ、プライベートチャンネルに参加できます。

したがって、作業グループを使用してプライベートチャンネル機能を実装できます。ただし、サーバーにバインドされたプライベートチャンネルに関する情報はビジネス側に保存する必要があります。

チャンネルタイプ

Discordでチャンネルを作成する際に、チャンネルタイプを音声またはテキストに設定できます。テキストチャンネルは、テキスト、絵文字、画像に基づくチャットを許可し、音声チャンネルは音声/ビデオチャットを許可します。ユーザーは同時に1つの音声チャンネルにしか参加できないことに注意してください。新しい音声チャンネルに参加するには、現在参加している音声チャンネルを離れる必要があります。

次の点に注意してください:

1. チャンネルを作成する際には、チャンネルタイプを設定する必要があります。チャンネル作成セクションで設定方法を探してください。

2. ユーザーが音声チャンネルに参加する際、システムはユーザーが別の音声チャンネルに既に参加しているかどうかを判断する必要があります。

3. ユーザーはアプリケーション内で1つの音声チャンネルにのみ参加できます。

4. チャットは現在、ユーザーが音声チャンネルに参加しているかどうか、どの音声チャンネルにいるかを照会するAPIを提供していません。この部分のデータはビジネス側で維持する必要があります。

最後のポイントについて、開発者はチャットが提供するグループ参加および離脱コールバックを使用して、ユーザーの音声チャンネルの状態を維持し、ビジネス側に保存できます。なお、チャットが提供するコールバックには遅延がある場合があり、ユーザーが1つの音声チャンネルを離れた後、短時間内に別の音声チャンネルに参加できないことがあります。したがって、この問題を解決するために、クライアントがユーザーの音声チャンネルの参加または離脱状態をビジネスサーバーにリアルタイムで報告することも可能です。

ユーザーをチャンネルに招待する

ユーザーがチャンネルに参加する方法は3つあります:

1. 他のユーザーからサーバーに招待される。ユーザーがサーバーに参加すると、そのユーザーはサーバーのすべての公開チャンネルに参加します。

2. サーバーを検索して参加します。

3. サーバー管理者からプライベートチャンネルに参加するよう招待される。

コミュニティの特性に応じて、ユーザーはサーバーに参加するだけで公開チャンネルに参加できます。

1. 正確なグループID検索によるサーバーへの参加をサポートします。

2. 招待を介してサーバーに参加することをサポートします。

3. サーバーへの参加を自発的に申請することをサポートし、承認は必要ありません。

チャンネルの設定

チャンネルをミュートまたはミュート解除し、チャンネルの通知を構成できます。対応するAPIは、setAllMute および setGroupReceiveMessageOpt です。

// 基本チャンネル情報を設定
V2TIMManager.getGroupManager().setTopicInfo(topicInfo, new V2TIMCallback() {
    @Override
    public void onSuccess() {
        // 正常に設定されました
    }

    @Override
    public void onError(int i, String s) {
        // 設定に失敗しました
    }
});
// チャンネルのメッセージ受信オプションを設定
String groupID = "topicid"
int opt = 0; 
V2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupID, opt, new V2TIMCallback() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onError(int i, String s) {

    }
});

チャンネルメッセージリスト

チャンネルの履歴メッセージを取得するには、getHistoryMessageList APIを使用できます。

final V2TIMMessageListGetOption option = new V2TIMMessageListGetOption();
option.setGroupID("チャンネルID");
option.setCount(20);
// その他の設定
V2TIMManager.getMessageManager().getHistoryMessageList(option, new V2TIMValueCallback<List<V2TIMMessage>>() {
    @Override
    public void onSuccess(List<V2TIMMessage> v2TIMMessages) {
        // チャンネルの履歴メッセージを正常に取得しました
    }

    @Override
    public void onError(int code, String desc) {
        // チャンネルの履歴メッセージの取得に失敗しました
    }
});

チャンネルの未読メッセージ数

チャンネルの未読メッセージ数は、サーバーの未読メッセージ数とは異なります。サーバーの未読メッセージ数は会話情報にあり、チャンネルの未読メッセージ数はチャンネルの基本情報にあります。リアルタイムで未読メッセージ数を取得するには、チャットが提供するグループコールバックonTopicInfoChangedを使用できます。

String groupID = "サーバーID";
List< String > topicIDList= new LinkedList(); // チャンネルメッセージのリスト
V2TIMManager.getGroupManager().getTopicInfoList(groupID, topicIDList, new V2TIMValueCallback<List<V2TIMTopicInfoResult>>() {
    @Override
    public void onSuccess(List<V2TIMTopicInfoResult> v2TIMTopicInfoResults) {
        // チャンネル情報を取得(チャンネルID、名前、未読メッセージ数など)
    }

    @Override
    public void onError(int i, String s) {

    }
});

チャンネルメンバーリスト

ユーザーがサーバーに参加すると、デフォルトでそのサーバーのすべての公開チャンネルに参加します。したがって、公開チャンネルメンバーリストを取得するには、サーバーのグループメンバーリストを取得する必要があります。以下に公開チャンネルメンバーリストを取得する方法を示します:

String groupID = "サーバーID";
int filter = 0; // グループメンバーの役割:管理者、一般メンバー...
long nextSeq = 0;// ページネーションパラメータ
V2TIMManager.getGroupManager().getGroupMemberList(groupID, filter, nextSeq , new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
    @Override
    public void onError(int i, String s) {
        CommonUtil.returnError(result,i,s);
    }

    @Override
    public void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {

    }
});

プライベートチャンネルのメンバーリストを取得するには、getGroupMemberList APIを呼び出すこともできますが、プライベートチャンネルのグループIDを渡します。

IDカード権限

権限グループでは、ユーザーは必要に応じてグループの権限を定義し、異なる権限とメンバーを異なる権限グループに構成することができ、ユーザーは権限によってグループを管理できます。コミュニティグループは権限グループによって管理できます。権限グループの管理は、固定役割の管理者より柔軟であり、多くのメンバーとトピックのあるコミュニティに適しています。

クライアント側の権限グループの統合例については、UI統合なし>コミュニティトピック>権限グループ.

サーバー側の権限グループの統合例については、サーバー側API> REST API>権限グループ管理>権限グループの作成.

スレッド

スレッドは、チャンネル内の特定のトピックに関するディスカッショングループです。ユーザーはスレッド内の特定のトピックのメッセージを閲覧でき、スレッドの概要もチャンネルのメッセージリストで見ることができます。スレッドはチャット内のグループとも見なされます。

スレッドの作成

スレッドは別々に作成することも、チャンネル内のメッセージにバインドして作成することもできます。チャットが提供するcreateGroup APIを使用してスレッドを作成できます。次の点に注意してください:

1. スレッドが作成されると、現在のサーバーのすべてのメンバーがスレッドにデフォルトで参加します。

2. スレッドが作成された後にサーバーに参加するメンバーもスレッドに追加されます。

3. 後にスレッドに参加するユーザーは、作成以来のスレッドのチャット履歴を閲覧できます。

要約すると、スレッド/グループが作成されると、サーバーのグループメンバーがスレッドに追加され、ユーザーがサーバーに参加すると、ユーザーのグループ参加コールバック内のすべてのスレッドにユーザーを追加する必要があります。これらの2つのステップは、ビジネスサーバー側で実装するのが最良です。使用するAPIは以下の通りです:

1. グループ内のメンバーのクエリ

2. グループの作成とメンバーの設定

3. ユーザーをグループに招待

サーバー側のWebhookは、Webhookユーザーがグループに参加した後です。

スレッドの数

チャンネルリスト内で、チャンネル内のスレッドリストを取得できます。したがって、スレッドとサーバー間の多対一の関係を設定する必要があります。スレッドに履歴メッセージがある場合、スレッドとメッセージ間の一対一の関係も設定する必要があります。チャットは現在、これらの関係を設定する機能を提供していないため、ビジネス側で維持する必要があります。ビジネス側が提供するHTTP APIを使用して、スレッドの数とスレッドリストを取得し、オンラインメッセージを送信してスレッドリストをリアルタイムで更新できます。

スレッドの概要

ユーザーがメッセージのためにスレッドを作成すると、ユーザーはメッセージリスト内で次のメッセージ概要情報を見ることができます:

1. スレッド内のメッセージ数

2. スレッド内のlastMessage関連情報

3. メッセージリストにリアルタイムで表示する必要のあるその他の情報

スレッドのメッセージ概要機能を実装するには、グループメッセージ送信コールバックとメッセージ編集機能を使用する必要があります。ユーザーがスレッド内でメッセージを送信すると、チャットサービスはメッセージ送信コールバックをトリガーし、関連情報をビジネス側に同期します。その後、ビジネスはスレッドのメッセージ数をカウントし、lastMessage情報を維持し、メッセージ編集APIを介して情報をメッセージに保存します。

メッセージ

メッセージフィードバック

メッセージフィードバックは、ユーザーのためのメッセージの拡張です。以下の図を参照してください:



すべてのタイプのメッセージは編集とフィードバックをサポートし、コミュニティグループのサポートが必要です。そのため、データをcloudCustomDataフィールドに保存することをお勧めします。以下は、参考用の詳細なデータ保存形式です:

{
  "reaction": {
    "simle":["user1","user2"]
  }
}
V2TIMManager.getMessageManager().modifyMessage(modifiedMessage, new V2TIMCompleteCallback<V2TIMMessage>() {
    @Override
    public void onComplete(int i, String s, V2TIMMessage v2TIMMessage) {
        // メッセージの修正が完了しました
    }
});

メッセージの編集

メッセージの編集はメッセージフィードバックと同じように機能しますが、カスタムデータの設定に少しの違いがあります。すべてのメッセージが編集をサポートするようにするには、データをcloudCustomDataフィールドで編集することをお勧めします。データ形式は次のとおりです:

{
  "isEdited": true
}
V2TIMManager.getMessageManager().modifyMessage(modifiedMessage, new V2TIMCompleteCallback<V2TIMMessage>() {
    @Override
    public void onComplete(int i, String s, V2TIMMessage v2TIMMessage) {
        // メッセージの編集が完了しました
    }
});

メッセージスターリング

メッセージスターリングは、グループチャット内のメッセージに星を付けて、他のユーザーがスター付きメッセージを見えるようにすることです。コミュニティグループはグループ属性をサポートしていないため、カスタムメッセージを使用してメッセージスターリング機能を実装します。

カスタムグループメッセージを使用するには、まずチャットコンソールで以下のように設定を行う必要があります:



次に、以下の設定を行います:

V2TIMGroupInfo info =  new V2TIMGroupInfo();
info.setCustomInfo("pin data");
V2TIMManager.getGroupManager().setGroupInfo(info, new V2TIMCallback() {
    @Override
    public void onError(int i, String s) {
        // 設定に失敗しました
    }

    @Override
    public void onSuccess() {
        // 正常に設定されました
    }
});

その後、グループメンバーはonMemberInfoChanged イベントを受信し、オフラインユーザーもグループプロファイルを介してスター付きメッセージ内容を取得できます:

List< String > groupIDList = new LinkedList();
V2TIMManager.getGroupManager().getGroupsInfo(groupIDList, new V2TIMValueCallback<List<V2TIMGroupInfoResult>>() {
    @Override
    public void onError(int i, String s) {

    }

    @Override
    public void onSuccess(List<V2TIMGroupInfoResult> v2TIMGroupInfoResults) {

    }
});

カスタムフィールドは現在、サーバーでのみ設定でき、チャンネルでは設定できないことに注意してください。

"Typing..." ステータス

友達がタイピングしているとき、他のクライアントのユーザーはそのユーザーの「タイピング中...」ステータスを見ることができます。これは、チャットのオンラインメッセージ機能を使用して実装できます。「タイピング中...」ステータスメッセージ:

1. オンラインユーザーのみが受信できます。

2. ローミングサーバーには保存されません。

さらに、パフォーマンス向上のために、次の最適化を行いました:

  • 「タイピング中...」ステータスメッセージの送信は、2人のユーザーが20秒以内に互いにメッセージを送信した場合にのみトリガーされます。
  • 同じテキストメッセージは、オンラインメッセージ送信を複数回トリガーしません。

プライベートメッセージ

プライベートメッセージは、Discordユーザーが互いに送信するメッセージです。友達かどうかに関係なく。

  • 友達でない他のユーザーにプライベートメッセージを送信するには、ユーザーのユーザーIDを知っており、チャットコンソールでメッセージ送信オプションの関係チェーンチェックを無効にする必要があります。そうしないと、メッセージ送信に失敗します。
  • または、addFriend APIを呼び出して、そのユーザーを友達として追加し、getFriendList APIを使用して連絡先を取得できます。

関連コードは以下の通りです:

// 友達を追加
V2TIMManager.getFriendshipManager().addFriend(info, new V2TIMValueCallback<V2TIMFriendOperationResult>() {
            @Override
            public void onError(int i, String s) {
                // 友達追加に失敗しました
            }

            @Override
            public void onSuccess(V2TIMFriendOperationResult v2TIMFriendOperationResult) {
               // 友達が正常に追加されました
            }
});
// 連絡先を取得
V2TIMManager.getFriendshipManager().getFriendList(new V2TIMValueCallback<List<V2TIMFriendInfo>>() {
            @Override
            public void onError(int i, String s) {
               // 連絡先の取得に失敗しました
            }

            @Override
            public void onSuccess(List<V2TIMFriendInfo> v2TIMFriendInfos) {
               // 連絡先を正常に取得しました
            }
});

個人センター

オンラインステータス

Discordのユーザーパネルのオンラインステータス機能は、チャットが提供する以下のオンラインステータスAPIによって実装できます:

  • setSelfStatus: 自分のカスタムオンラインステータスを設定するためのAPI。ユーザーのオンライン/オフラインステータスはチャットによって設定され、開発者によって変更されることはありません。
  • getUserStatus: 友達のオンラインステータスを取得するためのAPI。
  • onUserStatusChanged: 友達のオンラインステータスの変化をリッスンするためのAPI。

関連コードは以下の通りです:

// 自分のオンラインステータスを設定
V2TIMUserStatus customStatus = new V2TIMUserStatus();
V2TIMManager.getInstance().setSelfStatus(customStatus, new V2TIMCallback() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onError(int i, String s) {

    }
});
// 友達のオンラインステータスを取得
List<String> userIDList = new LinkerList();
V2TIMManager.getInstance().getUserStatus(userIDList, new V2TIMValueCallback<List<V2TIMUserStatus>>() {
    @Override
    public void onSuccess(List<V2TIMUserStatus> v2TIMUserStatuses) {

    }

    @Override
    public void onError(int i, String s) {

    }
});

個人情報

個人情報関連機能は、チャットが提供する以下の関係チェーン関連APIによって実装できます:

  • getUsersInfo: ユーザープロフィールを取得するためのAPI
  • setSelfInfo: ユーザーのプロフィールを設定するためのAPI
// ユーザーのプロフィールを設定
final V2TIMUserFullInfo userFullInfo = new V2TIMUserFullInfo();
V2TIMManager.getInstance().setSelfInfo(userFullInfo, new V2TIMCallback() {
    @Override
    public void onError(int i, String s) {

    }

    @Override
    public void onSuccess() {

    }
});
// ユーザープロフィールを取得
List<String> userIDList = new LinkedList();
V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {
    @Override
    public void onError(int i, String s) {

    }

    @Override
    public void onSuccess(List<V2TIMUserFullInfo> v2TIMUserFullInfos) {

    }
});

その他

検索



Discordは以下の検索機能を提供します:

チャットは豊富な検索機能を提供し、以下のものを含みます:

APIの使用方法については、公式ドキュメントをご覧ください。

オフラインプッシュ

チャットのオンラインメッセージはオフラインユーザーに届きません。この問題に対処するために、デバイスベンダーが提供するオフラインプッシュ機能をチャットに統合する必要があります。詳しくはオフラインプッシュ.

センシティブワード検証

Discordで情報や設定を送信する際、コンテンツはフィルタリングされる必要があります。チャットも同様のスキームを提供し、ユーザーがコンプライアンスを持ってチャットを使用できるようにします。

今すぐ注文

こちらをクリックして、迅速に購入ページに移動して注文してください。