Founder(+q), admin(+a), and halfop(+h) support
This commit is contained in:
parent
b84cb0811a
commit
a531a34ce8
8 changed files with 130 additions and 106 deletions
|
@ -57,6 +57,7 @@ CHANGELOG
|
||||||
* Compress exit dumps into one line - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
|
* Compress exit dumps into one line - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
|
||||||
* Display channel mode change message - Kiooeht [evacipatedBox]
|
* Display channel mode change message - Kiooeht [evacipatedBox]
|
||||||
* Disable quirks in +c memos - Lexi [lexicalNuance]
|
* Disable quirks in +c memos - Lexi [lexicalNuance]
|
||||||
|
* Founder, admin, and halfop support - Kiooeht [evacipatedBox]
|
||||||
* Bug fixes
|
* Bug fixes
|
||||||
* Logviewer updates - Kiooeht [evacipatedBox]
|
* Logviewer updates - Kiooeht [evacipatedBox]
|
||||||
* Memo scrollbar thing - Kiooeht [evacipatedBox]
|
* Memo scrollbar thing - Kiooeht [evacipatedBox]
|
||||||
|
|
229
memos.py
229
memos.py
|
@ -582,18 +582,16 @@ class PesterMemo(PesterConvo):
|
||||||
self.layout.setContentsMargins(margins["left"], margins["top"],
|
self.layout.setContentsMargins(margins["left"], margins["top"],
|
||||||
margins["right"], margins["bottom"])
|
margins["right"], margins["bottom"])
|
||||||
for item in [self.userlist.item(i) for i in range(0,self.userlist.count())]:
|
for item in [self.userlist.item(i) for i in range(0,self.userlist.count())]:
|
||||||
if item.op:
|
self.iconCrap(item)
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/op/icon"])
|
|
||||||
item.setIcon(icon)
|
|
||||||
elif item.voice:
|
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/voice/icon"])
|
|
||||||
item.setIcon(icon)
|
|
||||||
|
|
||||||
def addUser(self, handle):
|
def addUser(self, handle):
|
||||||
chumdb = self.mainwindow.chumdb
|
chumdb = self.mainwindow.chumdb
|
||||||
defaultcolor = QtGui.QColor("black")
|
defaultcolor = QtGui.QColor("black")
|
||||||
op = False
|
founder = False
|
||||||
voice = False
|
op = False
|
||||||
|
halfop = False
|
||||||
|
admin = False
|
||||||
|
voice = False
|
||||||
if handle[0] == '@':
|
if handle[0] == '@':
|
||||||
op = True
|
op = True
|
||||||
handle = handle[1:]
|
handle = handle[1:]
|
||||||
|
@ -602,23 +600,36 @@ class PesterMemo(PesterConvo):
|
||||||
self.userlist.optionsMenu.addAction(self.banuserAction)
|
self.userlist.optionsMenu.addAction(self.banuserAction)
|
||||||
self.optionsMenu.addMenu(self.chanModeMenu)
|
self.optionsMenu.addMenu(self.chanModeMenu)
|
||||||
self.op = True
|
self.op = True
|
||||||
|
elif handle[0] == '%':
|
||||||
|
halfop = True
|
||||||
|
handle = handle[1:]
|
||||||
|
if handle == self.mainwindow.profile().handle:
|
||||||
|
self.userlist.optionsMenu.addAction(self.opAction)
|
||||||
|
self.userlist.optionsMenu.addAction(self.banuserAction)
|
||||||
|
self.optionsMenu.addMenu(self.chanModeMenu)
|
||||||
|
self.halfop = True
|
||||||
elif handle[0] == '+':
|
elif handle[0] == '+':
|
||||||
voice = True
|
voice = True
|
||||||
handle = handle[1:]
|
handle = handle[1:]
|
||||||
|
elif handle[0] == '~':
|
||||||
|
founder = True
|
||||||
|
handle = handle[1:]
|
||||||
|
elif handle[0] == '&':
|
||||||
|
admin = True
|
||||||
|
handle = handle[1:]
|
||||||
item = QtGui.QListWidgetItem(handle)
|
item = QtGui.QListWidgetItem(handle)
|
||||||
if handle == self.mainwindow.profile().handle:
|
if handle == self.mainwindow.profile().handle:
|
||||||
color = self.mainwindow.profile().color
|
color = self.mainwindow.profile().color
|
||||||
else:
|
else:
|
||||||
color = chumdb.getColor(handle, defaultcolor)
|
color = chumdb.getColor(handle, defaultcolor)
|
||||||
item.setTextColor(color)
|
item.setTextColor(color)
|
||||||
|
item.founder = founder
|
||||||
item.op = op
|
item.op = op
|
||||||
|
item.halfop = halfop
|
||||||
|
item.admin = admin
|
||||||
item.voice = voice
|
item.voice = voice
|
||||||
if op:
|
self.umodes = ["founder", "op", "halfop", "admin", "voice"]
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/op/icon"])
|
self.iconCrap(item)
|
||||||
item.setIcon(icon)
|
|
||||||
elif voice:
|
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/voice/icon"])
|
|
||||||
item.setIcon(icon)
|
|
||||||
self.userlist.addItem(item)
|
self.userlist.addItem(item)
|
||||||
self.sortUsers()
|
self.sortUsers()
|
||||||
|
|
||||||
|
@ -628,7 +639,7 @@ class PesterMemo(PesterConvo):
|
||||||
while listing is not None:
|
while listing is not None:
|
||||||
users.append(self.userlist.takeItem(0))
|
users.append(self.userlist.takeItem(0))
|
||||||
listing = self.userlist.item(0)
|
listing = self.userlist.item(0)
|
||||||
users.sort(key=lambda x: ((0 if x.op else 1), (0 if x.voice else 1), x.text()))
|
users.sort(key=lambda x: ((0 if x.founder else (1 if x.op else (2 if x.halfop else (3 if x.admin else (4 if x.voice else 4))))), x.text()))
|
||||||
for u in users:
|
for u in users:
|
||||||
self.userlist.addItem(u)
|
self.userlist.addItem(u)
|
||||||
|
|
||||||
|
@ -838,6 +849,33 @@ class PesterMemo(PesterConvo):
|
||||||
self.textArea.append(convertTags(msg))
|
self.textArea.append(convertTags(msg))
|
||||||
self.mainwindow.chatlog.log(self.channel, msg)
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
|
|
||||||
|
def chumOPstuff(self, h, op):
|
||||||
|
chum = PesterProfile(h)
|
||||||
|
if h == self.mainwindow.profile().handle:
|
||||||
|
chum = self.mainwindow.profile()
|
||||||
|
ttracker = self.time
|
||||||
|
curtime = self.time.getTime()
|
||||||
|
elif self.times.has_key(h):
|
||||||
|
ttracker = self.times[h]
|
||||||
|
else:
|
||||||
|
ttracker = TimeTracker(timedelta(0))
|
||||||
|
opchum = PesterProfile(op)
|
||||||
|
if self.times.has_key(op):
|
||||||
|
opgrammar = self.times[op].getGrammar()
|
||||||
|
elif op == self.mainwindow.profile().handle:
|
||||||
|
opgrammar = self.time.getGrammar()
|
||||||
|
else:
|
||||||
|
opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW")
|
||||||
|
return (chum, opchum, opgrammar)
|
||||||
|
def iconCrap(self, c, down=True):
|
||||||
|
for m in (self.umodes if down else reversed(self.umodes)):
|
||||||
|
if eval("c."+m):
|
||||||
|
icon = PesterIcon(self.mainwindow.theme["memos/"+m+"/icon"])
|
||||||
|
c.setIcon(icon)
|
||||||
|
return
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
c.setIcon(icon)
|
||||||
|
|
||||||
@QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString)
|
@QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString)
|
||||||
def userPresentChange(self, handle, channel, update):
|
def userPresentChange(self, handle, channel, update):
|
||||||
h = unicode(handle)
|
h = unicode(handle)
|
||||||
|
@ -857,7 +895,9 @@ class PesterMemo(PesterConvo):
|
||||||
l = update.split(":")
|
l = update.split(":")
|
||||||
update = l[0]
|
update = l[0]
|
||||||
op = l[1]
|
op = l[1]
|
||||||
if (update in ["join","left", "kick", "+o", "-o", "+v", "-v"]) \
|
if (update in ["join","left", "kick", \
|
||||||
|
"+q", "-q", "+o", "-o", "+h", "-h", \
|
||||||
|
"+a", "-a", "+v", "-v"]) \
|
||||||
and channel != self.channel:
|
and channel != self.channel:
|
||||||
return
|
return
|
||||||
chums = self.userlist.findItems(h, QtCore.Qt.MatchFlags(0))
|
chums = self.userlist.findItems(h, QtCore.Qt.MatchFlags(0))
|
||||||
|
@ -883,14 +923,11 @@ class PesterMemo(PesterConvo):
|
||||||
newchums = self.userlist.findItems(newnick, QtCore.Qt.MatchFlags(0))
|
newchums = self.userlist.findItems(newnick, QtCore.Qt.MatchFlags(0))
|
||||||
for nc in newchums:
|
for nc in newchums:
|
||||||
for c in chums:
|
for c in chums:
|
||||||
if c.op:
|
nc.founder = c.founder
|
||||||
nc.op = True
|
nc.op = c.op
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/op/icon"])
|
nc.halfop = c.halfop
|
||||||
nc.setIcon(icon)
|
nc.admin = c.admin
|
||||||
if c.voice:
|
self.iconCrap(nc)
|
||||||
nc.voice = True
|
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/voice/icon"])
|
|
||||||
nc.setIcon(icon)
|
|
||||||
self.sortUsers()
|
self.sortUsers()
|
||||||
elif update == "kick":
|
elif update == "kick":
|
||||||
if len(chums) == 0:
|
if len(chums) == 0:
|
||||||
|
@ -950,31 +987,25 @@ class PesterMemo(PesterConvo):
|
||||||
time = self.time.getTime()
|
time = self.time.getTime()
|
||||||
serverText = "PESTERCHUM:TIME>"+delta2txt(time, "server")
|
serverText = "PESTERCHUM:TIME>"+delta2txt(time, "server")
|
||||||
self.messageSent.emit(serverText, self.title())
|
self.messageSent.emit(serverText, self.title())
|
||||||
|
elif update == "+q":
|
||||||
|
for c in chums:
|
||||||
|
c.founder = True
|
||||||
|
self.iconCrap(c)
|
||||||
|
self.sortUsers()
|
||||||
|
elif update == "-q":
|
||||||
|
for c in chums:
|
||||||
|
c.founder = False
|
||||||
|
self.iconCrap(c)
|
||||||
|
self.sortUsers()
|
||||||
elif update == "+o":
|
elif update == "+o":
|
||||||
if self.mainwindow.config.opvoiceMessages():
|
if self.mainwindow.config.opvoiceMessages():
|
||||||
chum = PesterProfile(h)
|
(chum, opchum, opgrammar) = self.chumOPstuff(h, op)
|
||||||
if h == self.mainwindow.profile().handle:
|
|
||||||
chum = self.mainwindow.profile()
|
|
||||||
ttracker = self.time
|
|
||||||
curtime = self.time.getTime()
|
|
||||||
elif self.times.has_key(h):
|
|
||||||
ttracker = self.times[h]
|
|
||||||
else:
|
|
||||||
ttracker = TimeTracker(timedelta(0))
|
|
||||||
opchum = PesterProfile(op)
|
|
||||||
if self.times.has_key(op):
|
|
||||||
opgrammar = self.times[op].getGrammar()
|
|
||||||
elif op == self.mainwindow.profile().handle:
|
|
||||||
opgrammar = self.time.getGrammar()
|
|
||||||
else:
|
|
||||||
opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW")
|
|
||||||
msg = chum.memoopmsg(opchum, opgrammar, systemColor)
|
msg = chum.memoopmsg(opchum, opgrammar, systemColor)
|
||||||
self.textArea.append(convertTags(msg))
|
self.textArea.append(convertTags(msg))
|
||||||
self.mainwindow.chatlog.log(self.channel, msg)
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
for c in chums:
|
for c in chums:
|
||||||
c.op = True
|
c.op = True
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/op/icon"])
|
self.iconCrap(c)
|
||||||
c.setIcon(icon)
|
|
||||||
if unicode(c.text()) == self.mainwindow.profile().handle:
|
if unicode(c.text()) == self.mainwindow.profile().handle:
|
||||||
self.userlist.optionsMenu.addAction(self.opAction)
|
self.userlist.optionsMenu.addAction(self.opAction)
|
||||||
self.userlist.optionsMenu.addAction(self.voiceAction)
|
self.userlist.optionsMenu.addAction(self.voiceAction)
|
||||||
|
@ -985,33 +1016,13 @@ class PesterMemo(PesterConvo):
|
||||||
elif update == "-o":
|
elif update == "-o":
|
||||||
self.mainwindow.channelNames.emit(self.channel)
|
self.mainwindow.channelNames.emit(self.channel)
|
||||||
if self.mainwindow.config.opvoiceMessages():
|
if self.mainwindow.config.opvoiceMessages():
|
||||||
chum = PesterProfile(h)
|
(chum, opchum, opgrammar) = self.chumOPstuff(h, op)
|
||||||
if h == self.mainwindow.profile().handle:
|
|
||||||
chum = self.mainwindow.profile()
|
|
||||||
ttracker = self.time
|
|
||||||
curtime = self.time.getTime()
|
|
||||||
elif self.times.has_key(h):
|
|
||||||
ttracker = self.times[h]
|
|
||||||
else:
|
|
||||||
ttracker = TimeTracker(timedelta(0))
|
|
||||||
opchum = PesterProfile(op)
|
|
||||||
if self.times.has_key(op):
|
|
||||||
opgrammar = self.times[op].getGrammar()
|
|
||||||
elif op == self.mainwindow.profile().handle:
|
|
||||||
opgrammar = self.time.getGrammar()
|
|
||||||
else:
|
|
||||||
opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW")
|
|
||||||
msg = chum.memodeopmsg(opchum, opgrammar, systemColor)
|
msg = chum.memodeopmsg(opchum, opgrammar, systemColor)
|
||||||
self.textArea.append(convertTags(msg))
|
self.textArea.append(convertTags(msg))
|
||||||
self.mainwindow.chatlog.log(self.channel, msg)
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
for c in chums:
|
for c in chums:
|
||||||
c.op = False
|
c.op = False
|
||||||
if c.voice:
|
self.iconCrap(c)
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/voice/icon"])
|
|
||||||
c.setIcon(icon)
|
|
||||||
else:
|
|
||||||
icon = QtGui.QIcon()
|
|
||||||
c.setIcon(icon)
|
|
||||||
if unicode(c.text()) == self.mainwindow.profile().handle:
|
if unicode(c.text()) == self.mainwindow.profile().handle:
|
||||||
self.userlist.optionsMenu.removeAction(self.opAction)
|
self.userlist.optionsMenu.removeAction(self.opAction)
|
||||||
self.userlist.optionsMenu.removeAction(self.voiceAction)
|
self.userlist.optionsMenu.removeAction(self.voiceAction)
|
||||||
|
@ -1019,62 +1030,70 @@ class PesterMemo(PesterConvo):
|
||||||
self.userlist.optionsMenu.removeAction(self.quirkDisableAction)
|
self.userlist.optionsMenu.removeAction(self.quirkDisableAction)
|
||||||
self.optionsMenu.removeAction(self.chanModeMenu.menuAction())
|
self.optionsMenu.removeAction(self.chanModeMenu.menuAction())
|
||||||
self.sortUsers()
|
self.sortUsers()
|
||||||
|
elif update == "+h":
|
||||||
|
if self.mainwindow.config.opvoiceMessages():
|
||||||
|
(chum, opchum, opgrammar) = self.chumOPstuff(h, op)
|
||||||
|
msg = chum.memoopmsg(opchum, opgrammar, systemColor)
|
||||||
|
self.textArea.append(convertTags(msg))
|
||||||
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
|
for c in chums:
|
||||||
|
c.halfop = True
|
||||||
|
self.iconCrap(c)
|
||||||
|
if unicode(c.text()) == self.mainwindow.profile().handle:
|
||||||
|
self.userlist.optionsMenu.addAction(self.opAction)
|
||||||
|
self.userlist.optionsMenu.addAction(self.voiceAction)
|
||||||
|
self.userlist.optionsMenu.addAction(self.banuserAction)
|
||||||
|
self.userlist.optionsMenu.addAction(self.quirkDisableAction)
|
||||||
|
self.optionsMenu.addMenu(self.chanModeMenu)
|
||||||
|
self.sortUsers()
|
||||||
|
elif update == "-h":
|
||||||
|
self.mainwindow.channelNames.emit(self.channel)
|
||||||
|
if self.mainwindow.config.opvoiceMessages():
|
||||||
|
(chum, opchum, opgrammar) = self.chumOPstuff(h, op)
|
||||||
|
msg = chum.memodeopmsg(opchum, opgrammar, systemColor)
|
||||||
|
self.textArea.append(convertTags(msg))
|
||||||
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
|
for c in chums:
|
||||||
|
c.halfop = False
|
||||||
|
self.iconCrap(c)
|
||||||
|
if unicode(c.text()) == self.mainwindow.profile().handle:
|
||||||
|
self.userlist.optionsMenu.removeAction(self.opAction)
|
||||||
|
self.userlist.optionsMenu.removeAction(self.voiceAction)
|
||||||
|
self.userlist.optionsMenu.removeAction(self.banuserAction)
|
||||||
|
self.userlist.optionsMenu.removeAction(self.quirkDisableAction)
|
||||||
|
self.optionsMenu.removeAction(self.chanModeMenu.menuAction())
|
||||||
|
self.sortUsers()
|
||||||
|
elif update == "+a":
|
||||||
|
for c in chums:
|
||||||
|
c.admin = True
|
||||||
|
self.iconCrap(c)
|
||||||
|
self.sortUsers()
|
||||||
|
elif update == "-a":
|
||||||
|
for c in chums:
|
||||||
|
c.admin = False
|
||||||
|
self.iconCrap(c)
|
||||||
|
self.sortUsers()
|
||||||
|
elif c == self.channel and h == "" and update[0] in ["+","-"]:
|
||||||
|
self.updateChanModes(update, op)
|
||||||
elif update == "+v":
|
elif update == "+v":
|
||||||
if self.mainwindow.config.opvoiceMessages():
|
if self.mainwindow.config.opvoiceMessages():
|
||||||
chum = PesterProfile(h)
|
(chum, opchum, opgrammar) = self.chumOPstuff(h, op)
|
||||||
if h == self.mainwindow.profile().handle:
|
|
||||||
chum = self.mainwindow.profile()
|
|
||||||
ttracker = self.time
|
|
||||||
curtime = self.time.getTime()
|
|
||||||
elif self.times.has_key(h):
|
|
||||||
ttracker = self.times[h]
|
|
||||||
else:
|
|
||||||
ttracker = TimeTracker(timedelta(0))
|
|
||||||
opchum = PesterProfile(op)
|
|
||||||
if self.times.has_key(op):
|
|
||||||
opgrammar = self.times[op].getGrammar()
|
|
||||||
elif op == self.mainwindow.profile().handle:
|
|
||||||
opgrammar = self.time.getGrammar()
|
|
||||||
else:
|
|
||||||
opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW")
|
|
||||||
msg = chum.memovoicemsg(opchum, opgrammar, systemColor)
|
msg = chum.memovoicemsg(opchum, opgrammar, systemColor)
|
||||||
self.textArea.append(convertTags(msg))
|
self.textArea.append(convertTags(msg))
|
||||||
self.mainwindow.chatlog.log(self.channel, msg)
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
for c in chums:
|
for c in chums:
|
||||||
c.voice = True
|
c.voice = True
|
||||||
if not c.op:
|
self.iconCrap(c)
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/voice/icon"])
|
|
||||||
c.setIcon(icon)
|
|
||||||
self.sortUsers()
|
self.sortUsers()
|
||||||
elif update == "-v":
|
elif update == "-v":
|
||||||
if self.mainwindow.config.opvoiceMessages():
|
if self.mainwindow.config.opvoiceMessages():
|
||||||
chum = PesterProfile(h)
|
(chum, opchum, opgrammar) = self.chumOPstuff(h, op)
|
||||||
if h == self.mainwindow.profile().handle:
|
|
||||||
chum = self.mainwindow.profile()
|
|
||||||
ttracker = self.time
|
|
||||||
curtime = self.time.getTime()
|
|
||||||
elif self.times.has_key(h):
|
|
||||||
ttracker = self.times[h]
|
|
||||||
else:
|
|
||||||
ttracker = TimeTracker(timedelta(0))
|
|
||||||
opchum = PesterProfile(op)
|
|
||||||
if self.times.has_key(op):
|
|
||||||
opgrammar = self.times[op].getGrammar()
|
|
||||||
elif op == self.mainwindow.profile().handle:
|
|
||||||
opgrammar = self.time.getGrammar()
|
|
||||||
else:
|
|
||||||
opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW")
|
|
||||||
msg = chum.memodevoicemsg(opchum, opgrammar, systemColor)
|
msg = chum.memodevoicemsg(opchum, opgrammar, systemColor)
|
||||||
self.textArea.append(convertTags(msg))
|
self.textArea.append(convertTags(msg))
|
||||||
self.mainwindow.chatlog.log(self.channel, msg)
|
self.mainwindow.chatlog.log(self.channel, msg)
|
||||||
for c in chums:
|
for c in chums:
|
||||||
c.voice = False
|
c.voice = False
|
||||||
if c.op:
|
self.iconCrap(c)
|
||||||
icon = PesterIcon(self.mainwindow.theme["memos/op/icon"])
|
|
||||||
c.setIcon(icon)
|
|
||||||
else:
|
|
||||||
icon = QtGui.QIcon()
|
|
||||||
c.setIcon(icon)
|
|
||||||
self.sortUsers()
|
self.sortUsers()
|
||||||
elif c == self.channel and h == "" and update[0] in ["+","-"]:
|
elif c == self.channel and h == "" and update[0] in ["+","-"]:
|
||||||
self.updateChanModes(update, op)
|
self.updateChanModes(update, op)
|
||||||
|
|
BIN
themes/pesterchum/admin.png
Normal file
BIN
themes/pesterchum/admin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 433 B |
BIN
themes/pesterchum/founder.png
Normal file
BIN
themes/pesterchum/founder.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 433 B |
BIN
themes/pesterchum/halfop.png
Normal file
BIN
themes/pesterchum/halfop.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 224 B |
|
@ -314,6 +314,9 @@
|
||||||
},
|
},
|
||||||
"systemMsgColor": "#646464",
|
"systemMsgColor": "#646464",
|
||||||
"op": { "icon": "$path/op.png" },
|
"op": { "icon": "$path/op.png" },
|
||||||
"voice": { "icon": "$path/voice.png" }
|
"halfop": { "icon": "$path/halfop.png" },
|
||||||
|
"voice": { "icon": "$path/voice.png" },
|
||||||
|
"founder": { "icon": "$path/founder.png" },
|
||||||
|
"admin": { "icon": "$path/admin.png" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
themes/trollian/halfop.png
Normal file
BIN
themes/trollian/halfop.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 239 B |
|
@ -346,6 +346,7 @@
|
||||||
},
|
},
|
||||||
"systemMsgColor": "#646464",
|
"systemMsgColor": "#646464",
|
||||||
"op": { "icon": "$path/op.png" },
|
"op": { "icon": "$path/op.png" },
|
||||||
|
"halfop": { "icon": "$path/halfop.png" },
|
||||||
"voice": { "icon": "$path/voice.png" }
|
"voice": { "icon": "$path/voice.png" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue