static void cmd_info(Tox *m, uint32_t friendnum, int argc, char (*argv)[MAX_COMMAND_LENGTH]) { char outmsg[MAX_COMMAND_LENGTH]; char timestr[64]; uint64_t curtime = (uint64_t) time(NULL); get_elapsed_time_str(timestr, sizeof(timestr), curtime - Tox_Bot.start_time); snprintf(outmsg, sizeof(outmsg), "Uptime: %s", timestr); tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); uint32_t numfriends = tox_self_get_friend_list_size(m); snprintf(outmsg, sizeof(outmsg), "Friends: %d (%d online)", numfriends, Tox_Bot.num_online_friends); tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); snprintf(outmsg, sizeof(outmsg), "Inactive friends are purged after %"PRIu64" days", Tox_Bot.inactive_limit / SECONDS_IN_DAY); tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); /* List active group chats and number of peers in each */ size_t num_chats = tox_conference_get_chatlist_size(m); if (num_chats == 0) { tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) "No active groupchats", strlen("No active groupchats"), NULL); return; } uint32_t groupchat_list[num_chats]; tox_conference_get_chatlist(m, groupchat_list); uint32_t i; for (i = 0; i < num_chats; ++i) { TOX_ERR_CONFERENCE_PEER_QUERY err; uint32_t groupnum = groupchat_list[i]; uint32_t num_peers = tox_conference_peer_count(m, groupnum, &err); if (err == TOX_ERR_CONFERENCE_PEER_QUERY_OK) { int idx = group_index(groupnum); const char *title = Tox_Bot.g_chats[idx].title_len ? Tox_Bot.g_chats[idx].title : "None"; const char *type = tox_conference_get_type(m, groupnum, NULL) == TOX_CONFERENCE_TYPE_AV ? "Audio" : "Text"; snprintf(outmsg, sizeof(outmsg), "Group %d | %s | peers: %d | Title: %s", groupnum, type, num_peers, title); tox_friend_send_message(m, friendnum, TOX_MESSAGE_TYPE_NORMAL, (uint8_t *) outmsg, strlen(outmsg), NULL); } } }
/** * @brief Check, that group has audio or video stream * @param groupId Id of group to check * @return True for AV groups, false for text-only groups */ bool CoreAV::isGroupAvEnabled(int groupId) const { Tox* tox = Core::getInstance()->tox.get(); TOX_ERR_CONFERENCE_GET_TYPE error; TOX_CONFERENCE_TYPE type = tox_conference_get_type(tox, groupId, &error); switch (error) { case TOX_ERR_CONFERENCE_GET_TYPE_OK: break; case TOX_ERR_CONFERENCE_GET_TYPE_CONFERENCE_NOT_FOUND: qCritical() << "Conference not found"; break; default: break; } return type == TOX_CONFERENCE_TYPE_AV; }