mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-15 03:03:01 +01:00
add group silencing and improve group help menu
This commit is contained in:
parent
928134da7a
commit
9cd2158c72
@ -95,10 +95,12 @@ static struct cmd_func group_commands[] = {
|
|||||||
{ "/privacy", cmd_set_privacy },
|
{ "/privacy", cmd_set_privacy },
|
||||||
{ "/prune", cmd_prune },
|
{ "/prune", cmd_prune },
|
||||||
{ "/rejoin", cmd_rejoin },
|
{ "/rejoin", cmd_rejoin },
|
||||||
|
{ "/silence", cmd_silence },
|
||||||
{ "/topic", cmd_set_topic },
|
{ "/topic", cmd_set_topic },
|
||||||
{ "/unban", cmd_unban },
|
{ "/unban", cmd_unban },
|
||||||
{ "/unignore", cmd_unignore },
|
{ "/unignore", cmd_unignore },
|
||||||
{ "/unmod", cmd_unmod },
|
{ "/unmod", cmd_unmod },
|
||||||
|
{ "/unsilence", cmd_unsilence },
|
||||||
#ifdef AUDIO
|
#ifdef AUDIO
|
||||||
{ "/mute", cmd_mute },
|
{ "/mute", cmd_mute },
|
||||||
{ "/sense", cmd_sense },
|
{ "/sense", cmd_sense },
|
||||||
@ -106,8 +108,9 @@ static struct cmd_func group_commands[] = {
|
|||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUM_SPECIAL_COMMANDS 11
|
#define NUM_SPECIAL_COMMANDS 14
|
||||||
static const char special_commands[NUM_SPECIAL_COMMANDS][MAX_CMDNAME_SIZE] = {
|
static const char special_commands[NUM_SPECIAL_COMMANDS][MAX_CMDNAME_SIZE] = {
|
||||||
|
"/ban",
|
||||||
"/gaccept",
|
"/gaccept",
|
||||||
"/group",
|
"/group",
|
||||||
"/ignore",
|
"/ignore",
|
||||||
@ -116,9 +119,11 @@ static const char special_commands[NUM_SPECIAL_COMMANDS][MAX_CMDNAME_SIZE] = {
|
|||||||
"/nick",
|
"/nick",
|
||||||
"/note",
|
"/note",
|
||||||
"/passwd",
|
"/passwd",
|
||||||
|
"/silence",
|
||||||
"/topic",
|
"/topic",
|
||||||
"/unignore",
|
"/unignore",
|
||||||
"/unmod",
|
"/unmod",
|
||||||
|
"/unsilence",
|
||||||
};
|
};
|
||||||
|
|
||||||
/* return true if input command is in the special_commands array. False otherwise.*/
|
/* return true if input command is in the special_commands array. False otherwise.*/
|
||||||
|
@ -62,7 +62,7 @@ void cmd_ignore(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[
|
|||||||
int peernum = group_get_nick_peernumber(self->num, nick);
|
int peernum = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
if (peernum == -1) {
|
if (peernum == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ static void cmd_kickban_helper(ToxWindow *self, Tox *m, const char *nick, bool s
|
|||||||
int peernumber = group_get_nick_peernumber(self->num, nick);
|
int peernumber = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
if (peernumber == -1) {
|
if (peernumber == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ void cmd_ban(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX
|
|||||||
for (i = 0; i < num_banned; ++i) {
|
for (i = 0; i < num_banned; ++i) {
|
||||||
struct tm tm_set = *localtime((const time_t *) &ban_list[i].time_set);
|
struct tm tm_set = *localtime((const time_t *) &ban_list[i].time_set);
|
||||||
char time_str[64];
|
char time_str[64];
|
||||||
strftime(time_str, sizeof(time_str), "%c", &tm_set);
|
strftime(time_str, sizeof(time_str), "%e %b %Y %H:%M:%S%p", &tm_set);
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "[ID: %d] %s : %s : %s", ban_list[i].id,
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "[ID: %d] %s : %s : %s", ban_list[i].id,
|
||||||
ban_list[i].ip_address, ban_list[i].nick, time_str);
|
ban_list[i].ip_address, ban_list[i].nick, time_str);
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ void cmd_mod(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX
|
|||||||
int peernumber = group_get_nick_peernumber(self->num, nick);
|
int peernumber = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
if (peernumber == -1) {
|
if (peernumber == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name.");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +243,12 @@ void cmd_unmod(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[M
|
|||||||
int peernumber = group_get_nick_peernumber(self->num, nick);
|
int peernumber = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
if (peernumber == -1) {
|
if (peernumber == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name.");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tox_group_get_peer_role(m, self->num, peernumber) != TOX_GR_MODERATOR) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "%s is not a moderator", nick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,6 +392,77 @@ void cmd_set_privacy(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmd_silence(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE])
|
||||||
|
{
|
||||||
|
if (argc < 1) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Peer name must be specified.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *nick = argv[1];
|
||||||
|
int peernumber = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
|
if (peernumber == -1) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = tox_group_set_peer_role(m, self->num, peernumber, TOX_GR_OBSERVER);
|
||||||
|
|
||||||
|
switch (ret) {
|
||||||
|
case 0: {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 1, BLUE, "You have silenced %s", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case -2: {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "You do not have permission to silence %s.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Failed to silence %s.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cmd_unsilence(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE])
|
||||||
|
{
|
||||||
|
if (argc < 1) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Peer name must be specified.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *nick = argv[1];
|
||||||
|
int peernumber = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
|
if (peernumber == -1) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tox_group_get_peer_role(m, self->num, peernumber) != TOX_GR_OBSERVER) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "%s is not silenced", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = tox_group_set_peer_role(m, self->num, peernumber, TOX_GR_USER);
|
||||||
|
|
||||||
|
switch (ret) {
|
||||||
|
case 0: {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 1, BLUE, "You have unsilenced %s", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case -2: {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "You do not have permission to unsilence %s.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Failed to unsilence %s.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cmd_rejoin(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE])
|
void cmd_rejoin(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE])
|
||||||
{
|
{
|
||||||
if (tox_group_reconnect(m, self->num) == -1) {
|
if (tox_group_reconnect(m, self->num) == -1) {
|
||||||
@ -447,7 +523,7 @@ void cmd_unignore(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv
|
|||||||
int peernum = group_get_nick_peernumber(self->num, nick);
|
int peernum = group_get_nick_peernumber(self->num, nick);
|
||||||
|
|
||||||
if (peernum == -1) {
|
if (peernum == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Peer '%s' does not exist", nick);
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name '%s'.", nick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +37,8 @@ void cmd_set_peerlimit(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (
|
|||||||
void cmd_set_privacy(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
void cmd_set_privacy(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
void cmd_rejoin(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
void cmd_rejoin(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
void cmd_set_topic(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
void cmd_set_topic(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
|
void cmd_silence(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
|
void cmd_unsilence(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
void cmd_unban(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
void cmd_unban(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
void cmd_unignore(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
void cmd_unignore(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
void cmd_unmod(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
void cmd_unmod(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]);
|
||||||
|
@ -70,9 +70,9 @@ extern struct user_settings *user_settings;
|
|||||||
extern struct Winthread Winthread;
|
extern struct Winthread Winthread;
|
||||||
|
|
||||||
#ifdef AUDIO
|
#ifdef AUDIO
|
||||||
#define AC_NUM_GROUP_COMMANDS 36
|
#define AC_NUM_GROUP_COMMANDS 38
|
||||||
#else
|
#else
|
||||||
#define AC_NUM_GROUP_COMMANDS 32
|
#define AC_NUM_GROUP_COMMANDS 34
|
||||||
#endif /* AUDIO */
|
#endif /* AUDIO */
|
||||||
|
|
||||||
/* groupchat command names used for tab completion. */
|
/* groupchat command names used for tab completion. */
|
||||||
@ -103,11 +103,13 @@ static const char group_cmd_list[AC_NUM_GROUP_COMMANDS][MAX_CMDNAME_SIZE] = {
|
|||||||
{ "/quit" },
|
{ "/quit" },
|
||||||
{ "/rejoin" },
|
{ "/rejoin" },
|
||||||
{ "/requests" },
|
{ "/requests" },
|
||||||
|
{ "/silence" },
|
||||||
{ "/status" },
|
{ "/status" },
|
||||||
{ "/topic" },
|
{ "/topic" },
|
||||||
{ "/unban" },
|
{ "/unban" },
|
||||||
{ "/unignore" },
|
{ "/unignore" },
|
||||||
{ "/unmod" },
|
{ "/unmod" },
|
||||||
|
{ "/unsilence" },
|
||||||
{ "/whisper" },
|
{ "/whisper" },
|
||||||
|
|
||||||
#ifdef AUDIO
|
#ifdef AUDIO
|
||||||
@ -876,7 +878,7 @@ static void groupchat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
/* TODO: Make this not poll */
|
/* TODO: Make this not poll */
|
||||||
pthread_mutex_lock(&Winthread.lock);
|
pthread_mutex_lock(&Winthread.lock);
|
||||||
uint8_t status = tox_group_get_status(m, self->num, i);
|
uint8_t status = tox_group_get_status(m, self->num, i);
|
||||||
TOX_GROUP_ROLE role = tox_group_get_role(m, self->num, i);
|
TOX_GROUP_ROLE role = tox_group_get_peer_role(m, self->num, i);
|
||||||
pthread_mutex_unlock(&Winthread.lock);
|
pthread_mutex_unlock(&Winthread.lock);
|
||||||
|
|
||||||
int maxlen_offset = role == TOX_GR_USER ? 2 : 3;
|
int maxlen_offset = role == TOX_GR_USER ? 2 : 3;
|
||||||
@ -906,6 +908,9 @@ static void groupchat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
} else if (role == TOX_GR_MODERATOR) {
|
} else if (role == TOX_GR_MODERATOR) {
|
||||||
rolesig = "+";
|
rolesig = "+";
|
||||||
rolecolour = GREEN;
|
rolecolour = GREEN;
|
||||||
|
} else if (role == TOX_GR_OBSERVER) {
|
||||||
|
rolesig = "-";
|
||||||
|
rolecolour = MAGENTA;
|
||||||
}
|
}
|
||||||
|
|
||||||
wattron(ctx->sidebar, COLOR_PAIR(rolecolour) | A_BOLD);
|
wattron(ctx->sidebar, COLOR_PAIR(rolecolour) | A_BOLD);
|
||||||
|
24
src/help.c
24
src/help.c
@ -243,21 +243,31 @@ static void help_draw_group(ToxWindow *self)
|
|||||||
wprintw(win, "Group commands:\n");
|
wprintw(win, "Group commands:\n");
|
||||||
wattroff(win, A_BOLD | COLOR_PAIR(RED));
|
wattroff(win, A_BOLD | COLOR_PAIR(RED));
|
||||||
|
|
||||||
wprintw(win, " /chatid : Print the group chat id to share with others.\n");
|
wprintw(win, " /chatid : Print the group chat id to share with others\n");
|
||||||
wprintw(win, " /ignore <nick> : Ignore peer\n");
|
wprintw(win, " /ignore <nick> : Ignore peer\n");
|
||||||
wprintw(win, " /unignore <nick> : Unignore peer \n");
|
wprintw(win, " /unignore <nick> : Unignore peer \n");
|
||||||
|
wprintw(win, " /rejoin : Rejoin the group\n");
|
||||||
|
wprintw(win, " /topic <msg> : Set group topic (show current topic if no msg)\n");
|
||||||
|
wprintw(win, " /whisper <nick> <msg> : Send private message to nick\n");
|
||||||
|
|
||||||
|
wattron(win, A_BOLD);
|
||||||
|
wprintw(win, " Moderator commands:\n");
|
||||||
|
wattroff(win, A_BOLD);
|
||||||
wprintw(win, " /kick <nick> : Kick peer\n");
|
wprintw(win, " /kick <nick> : Kick peer\n");
|
||||||
wprintw(win, " /ban <nick> : Ban peer (leave nick blank to see ban list)\n");
|
wprintw(win, " /ban <nick> : Ban peer (leave nick blank to see ban list)\n");
|
||||||
wprintw(win, " /unban <Ban ID> : Unban entry\n");
|
wprintw(win, " /unban <Ban ID> : Unban entry\n");
|
||||||
|
wprintw(win, " /silence <nick> : Silences peer for the entire group\n");
|
||||||
|
wprintw(win, " /unsilence <nick> : Unsilences peer\n");
|
||||||
|
|
||||||
|
wattron(win, A_BOLD);
|
||||||
|
wprintw(win, " Founder commands:\n");
|
||||||
|
wattroff(win, A_BOLD);
|
||||||
|
wprintw(win, " /mod <nick> : Promote peer to moderator\n");
|
||||||
|
wprintw(win, " /unmod <nick> : Demote moderator to normal user\n");
|
||||||
wprintw(win, " /passwd <password> : Set group password (leave blank to unset)\n");
|
wprintw(win, " /passwd <password> : Set group password (leave blank to unset)\n");
|
||||||
wprintw(win, " /peerlimit <num> : Set group peer limit\n");
|
wprintw(win, " /peerlimit <num> : Set group peer limit\n");
|
||||||
wprintw(win, " /privacy <state> : Set group privacy state: private|public\n");
|
wprintw(win, " /privacy <state> : Set group privacy state: private|public\n");
|
||||||
wprintw(win, " /rejoin : Rejoin the group\n");
|
|
||||||
wprintw(win, " /topic <msg> : Set group topic (show current topic if no msg)\n");
|
|
||||||
wprintw(win, " /whisper <nick> <msg> : Send private message to nick\n\n");
|
|
||||||
|
|
||||||
#ifdef AUDIO
|
|
||||||
#endif /* AUDIO */
|
|
||||||
help_draw_bottom_menu(win);
|
help_draw_bottom_menu(win);
|
||||||
|
|
||||||
box(win, ACS_VLINE, ACS_HLINE);
|
box(win, ACS_VLINE, ACS_HLINE);
|
||||||
@ -313,7 +323,7 @@ void help_onKey(ToxWindow *self, wint_t key)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'r':
|
case 'r':
|
||||||
help_init_window(self, 17, 80);
|
help_init_window(self, 23, 80);
|
||||||
self->help->type = HELP_GROUP;
|
self->help->type = HELP_GROUP;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user