グループチャットでは、参加しているピアのユーザー名がわからない場合、文字列「ToxUser」が返されます。 私の知る限り、toxcoreはこれについて他の兆候を示していません。 つまり、クライアントは、toxcoreから取得したピアの名前が正しいかどうかを信頼できません。 「ToxUser」は正当なユーザー名である可能性があるため、正しい名前であるかどうかを区別する方法はありません。 これにより、グループチャットの参加通知を作成することが困難になります。
ユーザーが私たちが参加しているグループチャットに参加すると、最初はその名前が「ToxUser」と表示されます。 次に、TOX_CONFERENCE_STATE_CHANGE_PEER_NAME_CHANGEを呼び出して実際の名前に変更される可能性があります。 クライアントがそれをどのように回避するかはわかりませんが、これを変更する必要があります。
group.c内:
/* Copy the name of peer_index who is in groupnumber to name.
* name must be at least MAX_NAME_LENGTH long.
*
* return length of name if success
* return -1 if groupnumber is invalid.
* return -2 if peer_index is invalid.
*/
int group_peername(const Group_Chats *g_c, int groupnumber, int peer_index, uint8_t *name)
{
Group_c *g = get_group_c(g_c, groupnumber);
if (!g) {
return -1;
}
if (peer_index < 0 || (uint32_t)peer_index >= g->numpeers_in_list) {
return -2;
}
if (g->peers_list[peer_index] == INVALID_PEER_INDEX) {
return -2;
}
Group_Peer *peer = &g->peers[g->peers_list[peer_index]];
peer->nick_changed = false;
if (peer->nick_len == 0) {
memcpy(name, "Tox User", 8);
return 8;
}
memcpy(name, peer->nick, peer->nick_len);
return peer->nick_len;
}
Tox User
を使用する代わりに、空の文字列を使用するのはどうですか?
多分この線に沿ったどこか:
if (peer->nick_len == 0) {
name[0] = '\0';
return 0;
}
デフォルトの名前が必要です。 空の文字列に設定して、クライアントにデフォルト名を決定させることもできますが、そうすると、クライアントごとに異なります。
別の問題もあります。 後で参加してユーザーの本名に変更されるすべてのピアに対して、文字列「ToxUser」が返されるのはなぜですか。 これは、最初はすべての参加ユーザーの名前が空であることを意味する必要があります。 どうして?
空の文字列に設定して、クライアントにデフォルト名を決定させることもできますが、そうすると、クライアントごとに異なります。
クライアントにデフォルト名を決定させるのは悪くないと思います。プロファイルを作成するときにqToxにはすでにデフォルト名があり、グループ用に作成するのはそれほど手間がかかりません。
後で参加してユーザーの本名に変更されるすべてのピアに対して、文字列「ToxUser」が返されるのはなぜですか。
ピア名を示すパケットは、誰かがグループに参加したことを示すパケットの後に到着する可能性がありますか? プロトコルがここで何を言っているのかわからない。
最も参考になるコメント
Tox User
を使用する代わりに、空の文字列を使用するのはどうですか?