diff mcabber/src/commands.c @ 572:afc2bd38b15c

Implement affiliations handling, add "/room whois"
author Mikael Berthe <mikael@lilotux.net>
date Sat, 03 Dec 2005 23:40:40 +0100
parents d63e6cbdc297
children 1b8e024c3a10
line wrap: on
line diff
--- a/mcabber/src/commands.c	Sat Dec 03 14:25:34 2005 +0100
+++ b/mcabber/src/commands.c	Sat Dec 03 23:40:40 2005 +0100
@@ -167,6 +167,7 @@
   compl_add_category_word(COMPL_ROOM, "remove");
   compl_add_category_word(COMPL_ROOM, "topic");
   compl_add_category_word(COMPL_ROOM, "unlock");
+  compl_add_category_word(COMPL_ROOM, "whois");
 }
 
 //  expandalias(line)
@@ -1262,7 +1263,7 @@
     return;
   }
 
-  jb_room_kickban(roomid, jid, NULL, 2, arg);
+  jb_room_setaffil(roomid, jid, NULL, affil_outcast, arg);
 
   free_arg_lst(paramlst);
 }
@@ -1284,7 +1285,7 @@
     return;
   }
 
-  jb_room_kickban(roomid, NULL, nick, 1, arg);
+  jb_room_setaffil(roomid, NULL, nick, affil_none, arg);
 
   free_arg_lst(paramlst);
 }
@@ -1389,6 +1390,66 @@
   jb_room_unlock(buddy_getjid(bud));
 }
 
+static void room_whois(gpointer bud, char *arg)
+{
+  char **paramlst;
+  gchar *nick, *buffer;
+  const char *jid, *realjid;
+  const char *rst_msg;
+  enum imstatus rstatus;
+  enum imrole role;
+  enum imaffiliation affil;
+
+  char *strroles[] = { "none", "moderator", "participant", "visitor" };
+  char *straffil[] = { "none", "owner", "admin", "member", "outcast" };
+
+  paramlst = split_arg(arg, 1, 0); // nickname
+  nick = *paramlst;
+
+  if (!nick || !*nick) {
+    scr_LogPrint(LPRINT_NORMAL, "Missing parameter (nickname)");
+    free_arg_lst(paramlst);
+    return;
+  }
+
+  jid = buddy_getjid(bud);
+  rstatus = buddy_getstatus(bud, nick);
+
+  if (rstatus == offline) {
+    scr_LogPrint(LPRINT_NORMAL, "No such member: %s", nick);
+    free_arg_lst(paramlst);
+    return;
+  }
+
+  rst_msg = buddy_getstatusmsg(bud, nick);
+  if (!rst_msg) rst_msg = "";
+
+  role = buddy_getrole(bud, nick);
+  affil = buddy_getaffil(bud, nick);
+  realjid = buddy_getrjid(bud, nick);
+
+  buffer = g_new(char, 128);
+
+  snprintf(buffer, 127, "Whois [%s]", nick);
+  scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
+  snprintf(buffer, 127, "Status: [%c] %s", imstatus2char[rstatus],
+           rst_msg);
+  scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
+
+  if (realjid) {
+    snprintf(buffer, 127, "Real jid: <%s>", realjid);
+    scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
+  }
+
+  snprintf(buffer, 127, "Role: %s", strroles[role]);
+  scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
+  snprintf(buffer, 127, "Affiliation: %s", straffil[affil]);
+  scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
+
+  g_free(buffer);
+  free_arg_lst(paramlst);
+}
+
 static void do_room(char *arg)
 {
   char **paramlst;
@@ -1446,6 +1507,9 @@
   } else if (!strcasecmp(subcmd, "topic"))  {
     if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
       room_topic(bud, arg);
+  } else if (!strcasecmp(subcmd, "whois"))  {
+    if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
+      room_whois(bud, arg);
   } else {
     scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
   }