+ /* turn the nice human readable pattern into a mask */
+ int CompilePattern(const char* pattern)
+ {
+ int p = 0;
+ for (const char* n = pattern; *n; n++)
+ {
+ switch (*n)
+ {
+ case 'p':
+ p |= SILENCE_PRIVATE;
+ break;
+ case 'c':
+ p |= SILENCE_CHANNEL;
+ break;
+ case 'i':
+ p |= SILENCE_INVITE;
+ break;
+ case 'n':
+ p |= SILENCE_NOTICE;
+ break;
+ case 't':
+ p |= SILENCE_CNOTICE;
+ break;
+ case 'a':
+ case '*':
+ p |= SILENCE_ALL;
+ break;
+ case 'x':
+ p |= SILENCE_EXCLUDE;
+ break;
+ default:
+ break;
+ }
+ }
+ return p;
+ }
+
+ /* turn the mask into a nice human readable format */
+ std::string DecompPattern (const int pattern)
+ {
+ std::string out;
+ if (pattern & SILENCE_PRIVATE)
+ out += ",privatemessages";
+ if (pattern & SILENCE_CHANNEL)
+ out += ",channelmessages";
+ if (pattern & SILENCE_INVITE)
+ out += ",invites";
+ if (pattern & SILENCE_NOTICE)
+ out += ",privatenotices";
+ if (pattern & SILENCE_CNOTICE)
+ out += ",channelnotices";
+ if (pattern & SILENCE_ALL)
+ out = ",all";
+ if (pattern & SILENCE_EXCLUDE)
+ out += ",exclude";
+ if (out.length())
+ return "<" + out.substr(1) + ">";
+ else
+ return "<none>";
+ }
+
+};