mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-02-02 15:44:06 +01:00
ChannelIdDatabasePlugin: allow unregistered users to use commands
This adds a new configuration variable, supybot.databases.plugins.requireRegistration, which defaults to True for maximum security.
This commit is contained in:
parent
e937128c69
commit
562fa14706
@ -330,7 +330,7 @@ class ChannelIdDatabasePlugin(callbacks.Plugin):
|
|||||||
(self.name(), id, channel))
|
(self.name(), id, channel))
|
||||||
|
|
||||||
def checkChangeAllowed(self, irc, msg, channel, user, record):
|
def checkChangeAllowed(self, irc, msg, channel, user, record):
|
||||||
if user.id == record.by:
|
if (hasattr(user, 'id') and user.id == record.by) or user == record.by:
|
||||||
return True
|
return True
|
||||||
cap = ircdb.makeChannelCapability(channel, 'op')
|
cap = ircdb.makeChannelCapability(channel, 'op')
|
||||||
if ircdb.checkCapability(msg.prefix, cap):
|
if ircdb.checkCapability(msg.prefix, cap):
|
||||||
@ -341,27 +341,38 @@ class ChannelIdDatabasePlugin(callbacks.Plugin):
|
|||||||
"""This should irc.error or raise an exception if text is invalid."""
|
"""This should irc.error or raise an exception if text is invalid."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def add(self, irc, msg, args, user, channel, text):
|
def getUserId(self, irc, prefix):
|
||||||
|
try:
|
||||||
|
user = ircdb.users.getUser(prefix)
|
||||||
|
return user.id
|
||||||
|
except KeyError:
|
||||||
|
if conf.supybot.databases.plugins.requireRegistration():
|
||||||
|
irc.errorNotRegistered(Raise=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
def add(self, irc, msg, args, channel, text):
|
||||||
"""[<channel>] <text>
|
"""[<channel>] <text>
|
||||||
|
|
||||||
Adds <text> to the $type database for <channel>.
|
Adds <text> to the $type database for <channel>.
|
||||||
<channel> is only necessary if the message isn't sent in the channel
|
<channel> is only necessary if the message isn't sent in the channel
|
||||||
itself.
|
itself.
|
||||||
"""
|
"""
|
||||||
|
user = self.getUserId(irc, msg.prefix) or msg.prefix
|
||||||
at = time.time()
|
at = time.time()
|
||||||
self.addValidator(irc, text)
|
self.addValidator(irc, text)
|
||||||
if text is not None:
|
if text is not None:
|
||||||
id = self.db.add(channel, at, user.id, text)
|
id = self.db.add(channel, at, user, text)
|
||||||
irc.replySuccess('%s #%s added.' % (self.name(), id))
|
irc.replySuccess('%s #%s added.' % (self.name(), id))
|
||||||
add = wrap(add, ['user', 'channeldb', 'text'])
|
add = wrap(add, ['channeldb', 'text'])
|
||||||
|
|
||||||
def remove(self, irc, msg, args, user, channel, id):
|
def remove(self, irc, msg, args, channel, id):
|
||||||
"""[<channel>] <id>
|
"""[<channel>] <id>
|
||||||
|
|
||||||
Removes the $type with id <id> from the $type database for <channel>.
|
Removes the $type with id <id> from the $type database for <channel>.
|
||||||
<channel> is only necessary if the message isn't sent in the channel
|
<channel> is only necessary if the message isn't sent in the channel
|
||||||
itself.
|
itself.
|
||||||
"""
|
"""
|
||||||
|
user = self.getUserId(irc, msg.prefix) or msg.prefix
|
||||||
try:
|
try:
|
||||||
record = self.db.get(channel, id)
|
record = self.db.get(channel, id)
|
||||||
self.checkChangeAllowed(irc, msg, channel, user, record)
|
self.checkChangeAllowed(irc, msg, channel, user, record)
|
||||||
@ -369,7 +380,7 @@ class ChannelIdDatabasePlugin(callbacks.Plugin):
|
|||||||
irc.replySuccess()
|
irc.replySuccess()
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.noSuchRecord(irc, channel, id)
|
self.noSuchRecord(irc, channel, id)
|
||||||
remove = wrap(remove, ['user', 'channeldb', 'id'])
|
remove = wrap(remove, ['channeldb', 'id'])
|
||||||
|
|
||||||
def searchSerializeRecord(self, record):
|
def searchSerializeRecord(self, record):
|
||||||
text = utils.str.ellipsisify(record.text, 50)
|
text = utils.str.ellipsisify(record.text, 50)
|
||||||
@ -430,13 +441,14 @@ class ChannelIdDatabasePlugin(callbacks.Plugin):
|
|||||||
self.noSuchRecord(irc, channel, id)
|
self.noSuchRecord(irc, channel, id)
|
||||||
get = wrap(get, ['channeldb', 'id'])
|
get = wrap(get, ['channeldb', 'id'])
|
||||||
|
|
||||||
def change(self, irc, msg, args, user, channel, id, replacer):
|
def change(self, irc, msg, args, channel, id, replacer):
|
||||||
"""[<channel>] <id> <regexp>
|
"""[<channel>] <id> <regexp>
|
||||||
|
|
||||||
Changes the $type with id <id> according to the regular expression
|
Changes the $type with id <id> according to the regular expression
|
||||||
<regexp>. <channel> is only necessary if the message isn't sent in the
|
<regexp>. <channel> is only necessary if the message isn't sent in the
|
||||||
channel itself.
|
channel itself.
|
||||||
"""
|
"""
|
||||||
|
user = self.getUserId(irc, msg.prefix) or msg.prefix
|
||||||
try:
|
try:
|
||||||
record = self.db.get(channel, id)
|
record = self.db.get(channel, id)
|
||||||
self.checkChangeAllowed(irc, msg, channel, user, record)
|
self.checkChangeAllowed(irc, msg, channel, user, record)
|
||||||
@ -445,7 +457,7 @@ class ChannelIdDatabasePlugin(callbacks.Plugin):
|
|||||||
irc.replySuccess()
|
irc.replySuccess()
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.noSuchRecord(irc, channel, id)
|
self.noSuchRecord(irc, channel, id)
|
||||||
change = wrap(change, ['user', 'channeldb', 'id', 'regexpReplacer'])
|
change = wrap(change, ['channeldb', 'id', 'regexpReplacer'])
|
||||||
|
|
||||||
def stats(self, irc, msg, args, channel):
|
def stats(self, irc, msg, args, channel):
|
||||||
"""[<channel>]
|
"""[<channel>]
|
||||||
|
@ -931,6 +931,11 @@ class ChannelSpecific(registry.Boolean):
|
|||||||
return lchannel
|
return lchannel
|
||||||
|
|
||||||
registerGroup(supybot.databases, 'plugins')
|
registerGroup(supybot.databases, 'plugins')
|
||||||
|
|
||||||
|
registerGlobalValue(supybot.databases.plugins, 'requireRegistration',
|
||||||
|
registry.Boolean(True, _("""Determines whether the bot will require user
|
||||||
|
registration to use 'add' commands in database-based Supybot
|
||||||
|
plugins.""")))
|
||||||
registerChannelValue(supybot.databases.plugins, 'channelSpecific',
|
registerChannelValue(supybot.databases.plugins, 'channelSpecific',
|
||||||
ChannelSpecific(True, _("""Determines whether database-based plugins that
|
ChannelSpecific(True, _("""Determines whether database-based plugins that
|
||||||
can be channel-specific will be so. This can be overridden by individual
|
can be channel-specific will be so. This can be overridden by individual
|
||||||
|
Loading…
Reference in New Issue
Block a user