diff --git a/components/app.js b/components/app.js index 98d2c81..414e253 100644 --- a/components/app.js +++ b/components/app.js @@ -708,8 +708,8 @@ export default class App extends Component { this.setBufferState({ server: serverID, name: channel }, (buf) => { var members = new irc.CaseMapMap(buf.members); membersList.forEach((s) => { - var member = irc.parseMembership(s); - members.set(member.nick, member.prefix); + var member = irc.parseTargetPrefix(s); + members.set(member.name, member.prefix); }); return { members }; @@ -1321,7 +1321,7 @@ export default class App extends Component { var chanmodes = client.isupport.get("CHANMODES") || irc.STD_CHANMODES; var prefix = client.isupport.get("PREFIX") || ""; - var prefixByMode = new Map(irc.parseMemberships(prefix).map((membership) => { + var prefixByMode = new Map(irc.parseMembershipModes(prefix).map((membership) => { return [membership.mode, membership.prefix]; })); @@ -1376,7 +1376,7 @@ export default class App extends Component { var client = this.clients.get(serverID); var prefix = client.isupport.get("PREFIX") || ""; - var prefixPrivs = new Map(irc.parseMemberships(prefix).map((membership, i) => { + var prefixPrivs = new Map(irc.parseMembershipModes(prefix).map((membership, i) => { return [membership.prefix, i]; })); diff --git a/lib/irc.js b/lib/irc.js index eeae4d5..d7ebe03 100644 --- a/lib/irc.js +++ b/lib/irc.js @@ -42,6 +42,7 @@ export const ERR_SASLTOOLONG = "905"; export const ERR_SASLABORTED = "906"; export const ERR_SASLALREADY = "907"; +export const STD_MEMBERSHIPS = "~&@%+"; export const STD_CHANNEL_TYPES = "#&+!"; export const STD_CHANMODES = "beI,k,l,imnst"; @@ -208,10 +209,9 @@ export function formatMessage(msg) { return s; } -export function parseMembership(s) { +/** Split a prefix and a name out of a target. */ +export function parseTargetPrefix(s) { // TODO: use the PREFIX token from RPL_ISUPPORT - const STD_MEMBERSHIPS = "~&@%+"; - var i; for (i = 0; i < s.length; i++) { if (STD_MEMBERSHIPS.indexOf(s[i]) < 0) { @@ -221,7 +221,7 @@ export function parseMembership(s) { return { prefix: s.slice(0, i), - nick: s.slice(i), + name: s.slice(i), }; } @@ -514,7 +514,8 @@ export class CaseMapMap { } } -export function parseMemberships(str) { +/** Parse the ISUPPORT PREFIX token */ +export function parseMembershipModes(str) { if (str[0] !== "(") { throw new Error("malformed ISUPPORT PREFIX value: expected opening parenthesis"); }