Use filters instead of looping through all messages.
This commit is contained in:
parent
aab95fb040
commit
655889d2b9
1 changed files with 74 additions and 96 deletions
|
@ -61,62 +61,6 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
// Message maximum queue size
|
// Message maximum queue size
|
||||||
private var maxSize = 50
|
private var maxSize = 50
|
||||||
|
|
||||||
/**
|
|
||||||
* Cleans the messages queue.
|
|
||||||
*/
|
|
||||||
private fun clean(): Boolean {
|
|
||||||
// if (bot.logger.isDebugEnabled) bot.logger.debug("Cleaning the messages.")
|
|
||||||
return TellMessagesMgr.clean(messages, maxDays.toLong())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete message.
|
|
||||||
private fun deleteMessage(channel: String, args: String, event: GenericMessageEvent) {
|
|
||||||
val split = args.split(" ")
|
|
||||||
if (split.size == 2) {
|
|
||||||
val id = split[1]
|
|
||||||
var deleted = false
|
|
||||||
if (TELL_ALL_KEYWORD.equals(id, ignoreCase = true)) {
|
|
||||||
for (message in messages) {
|
|
||||||
if (message.sender.equals(event.user.nick, ignoreCase = true) && message.isReceived) {
|
|
||||||
messages.remove(message)
|
|
||||||
deleted = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (deleted) {
|
|
||||||
save()
|
|
||||||
event.sendMessage("Delivered messages have been deleted.")
|
|
||||||
} else {
|
|
||||||
event.sendMessage("No delivered messages were found.")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var found = false
|
|
||||||
for (message in messages) {
|
|
||||||
found = (message.id == id)
|
|
||||||
if (found && (message.sender.equals(event.user.nick, ignoreCase = true) || isChannelOp(
|
|
||||||
channel,
|
|
||||||
event
|
|
||||||
))
|
|
||||||
) {
|
|
||||||
messages.remove(message)
|
|
||||||
save()
|
|
||||||
event.sendMessage("Your message was deleted from the queue.")
|
|
||||||
deleted = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!deleted) {
|
|
||||||
if (found) {
|
|
||||||
event.sendMessage("Only messages that you sent can be deleted.")
|
|
||||||
} else {
|
|
||||||
event.sendMessage("The specified message [ID $id] could not be found.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
helpResponse(channel, args, event)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The tell command.
|
* The tell command.
|
||||||
*/
|
*/
|
||||||
|
@ -127,12 +71,20 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
helpFormat("%c $name <nick> <message>"),
|
helpFormat("%c $name <nick> <message>"),
|
||||||
"To view queued and sent messages:",
|
"To view queued and sent messages:",
|
||||||
helpFormat("%c $name ${View.VIEW_CMD}"),
|
helpFormat("%c $name ${View.VIEW_CMD}"),
|
||||||
"Messages are kept for ${bold(maxDays)}" + " day".plural(maxDays.toLong()) + '.'
|
"Messages are kept for ${maxDays.bold()}" + " day".plural(maxDays.toLong()) + '.'
|
||||||
)
|
)
|
||||||
override val isOpOnly: Boolean = false
|
override val isOpOnly: Boolean = false
|
||||||
override val isPublic: Boolean = isEnabled()
|
override val isPublic: Boolean = isEnabled()
|
||||||
override val isVisible: Boolean = isEnabled()
|
override val isVisible: Boolean = isEnabled()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleans the messages queue.
|
||||||
|
*/
|
||||||
|
private fun clean(): Boolean {
|
||||||
|
// if (bot.logger.isDebugEnabled) bot.logger.debug("Cleaning the messages.")
|
||||||
|
return TellMessagesMgr.clean(messages, maxDays.toLong())
|
||||||
|
}
|
||||||
|
|
||||||
override fun commandResponse(channel: String, args: String, event: GenericMessageEvent) {
|
override fun commandResponse(channel: String, args: String, event: GenericMessageEvent) {
|
||||||
if (isEnabled()) {
|
if (isEnabled()) {
|
||||||
if (args.isBlank()) {
|
if (args.isBlank()) {
|
||||||
|
@ -154,6 +106,34 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete message.
|
||||||
|
private fun deleteMessage(channel: String, args: String, event: GenericMessageEvent) {
|
||||||
|
val split = args.split(" ")
|
||||||
|
if (split.size == 2) {
|
||||||
|
val id = split[1]
|
||||||
|
if (TELL_ALL_KEYWORD.equals(id, ignoreCase = true)) {
|
||||||
|
if (messages.removeIf { it.sender.equals(event.user.nick, true) && it.isReceived }) {
|
||||||
|
save()
|
||||||
|
event.sendMessage("Delivered messages have been deleted.")
|
||||||
|
} else {
|
||||||
|
event.sendMessage("No delivered messages were found.")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (messages.removeIf {
|
||||||
|
it.id == id &&
|
||||||
|
(it.sender.equals(event.user.nick, true) || isChannelOp(channel, event))
|
||||||
|
}) {
|
||||||
|
save()
|
||||||
|
event.sendMessage("The message was deleted from the queue.")
|
||||||
|
} else {
|
||||||
|
event.sendMessage("The specified message [ID $id] could not be found.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
helpResponse(channel, args, event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun isEnabled(): Boolean {
|
override fun isEnabled(): Boolean {
|
||||||
return maxSize > 0 && maxDays > 0
|
return maxSize > 0 && maxDays > 0
|
||||||
}
|
}
|
||||||
|
@ -175,7 +155,7 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
val message = TellMessage(event.user.nick, split[0], split[1].trim())
|
val message = TellMessage(event.user.nick, split[0], split[1].trim())
|
||||||
messages.add(message)
|
messages.add(message)
|
||||||
save()
|
save()
|
||||||
event.sendMessage("Message [ID ${message.id}] was queued for ${bold(message.recipient)}")
|
event.sendMessage("Message [ID ${message.id}] was queued for ${message.recipient.bold()}")
|
||||||
} else {
|
} else {
|
||||||
event.sendMessage("Sorry, the messages queue is currently full.")
|
event.sendMessage("Sorry, the messages queue is currently full.")
|
||||||
}
|
}
|
||||||
|
@ -197,36 +177,35 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
fun send(event: GenericUserEvent) {
|
fun send(event: GenericUserEvent) {
|
||||||
val nickname = event.user.nick
|
val nickname = event.user.nick
|
||||||
if (isEnabled() && nickname != event.getBot<PircBotX>().nick) {
|
if (isEnabled() && nickname != event.getBot<PircBotX>().nick) {
|
||||||
messages.stream().filter { message: TellMessage -> message.isMatch(nickname) }
|
messages.filter { it.isMatch(nickname) }.forEach { message ->
|
||||||
.forEach { message: TellMessage ->
|
if (message.recipient.equals(nickname, ignoreCase = true) && !message.isReceived) {
|
||||||
if (message.recipient.equals(nickname, ignoreCase = true) && !message.isReceived) {
|
if (message.sender == nickname) {
|
||||||
if (message.sender == nickname) {
|
if (event !is MessageEvent) {
|
||||||
if (event !is MessageEvent) {
|
|
||||||
event.user.send().message(
|
|
||||||
"${bold("You")} wanted me to remind you: ${reverseColor(message.message)}"
|
|
||||||
)
|
|
||||||
message.isReceived = true
|
|
||||||
message.isNotified = true
|
|
||||||
save()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
event.user.send().message(
|
event.user.send().message(
|
||||||
"${message.sender} wanted me to tell you: ${reverseColor(message.message)}"
|
"${"You".bold()} wanted me to remind you: ${message.message.reverseColor()}"
|
||||||
)
|
)
|
||||||
message.isReceived = true
|
message.isReceived = true
|
||||||
|
message.isNotified = true
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
} else if (message.sender.equals(nickname, ignoreCase = true) && message.isReceived
|
} else {
|
||||||
&& !message.isNotified
|
|
||||||
) {
|
|
||||||
event.user.send().message(
|
event.user.send().message(
|
||||||
"Your message ${reverseColor("[ID ${message.id}]")} was sent to "
|
"${message.sender} wanted me to tell you: ${message.message.reverseColor()}"
|
||||||
+ "${bold(message.recipient)} on ${message.receptionDate}"
|
|
||||||
)
|
)
|
||||||
message.isNotified = true
|
message.isReceived = true
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
|
} else if (message.sender.equals(nickname, ignoreCase = true) && message.isReceived
|
||||||
|
&& !message.isNotified
|
||||||
|
) {
|
||||||
|
event.user.send().message(
|
||||||
|
"Your message ${"[ID ${message.id}]".reverseColor()} was sent to "
|
||||||
|
+ "${message.recipient.bold()} on ${message.receptionDate}"
|
||||||
|
)
|
||||||
|
message.isNotified = true
|
||||||
|
save()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,7 +221,7 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
if (messages.isNotEmpty()) {
|
if (messages.isNotEmpty()) {
|
||||||
for (message in messages) {
|
for (message in messages) {
|
||||||
event.sendMessage(
|
event.sendMessage(
|
||||||
"${bold(message.sender)}$ARROW${bold(message.recipient)} [ID: ${message.id}, " +
|
"${message.sender.bold()}$ARROW${message.recipient.bold()} [ID: ${message.id}, " +
|
||||||
(if (message.isReceived) "DELIVERED]" else "QUEUED]")
|
(if (message.isReceived) "DELIVERED]" else "QUEUED]")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -254,24 +233,23 @@ class Tell(private val serialObject: String) : AbstractCommand() {
|
||||||
// View messages.
|
// View messages.
|
||||||
private fun viewMessages(event: GenericMessageEvent) {
|
private fun viewMessages(event: GenericMessageEvent) {
|
||||||
var hasMessage = false
|
var hasMessage = false
|
||||||
for (message in messages) {
|
for (message in messages.filter { it.isMatch(event.user.nick) }) {
|
||||||
if (message.isMatch(event.user.nick)) {
|
if (!hasMessage) {
|
||||||
if (!hasMessage) {
|
hasMessage = true
|
||||||
hasMessage = true; event.sendMessage("Here are your messages: ")
|
event.sendMessage("Here are your messages: ")
|
||||||
}
|
|
||||||
if (message.isReceived) {
|
|
||||||
event.sendMessage(
|
|
||||||
bold(message.sender) + ARROW + bold(message.recipient) +
|
|
||||||
" [${message.receptionDate.toUtcDateTime()}, ID: ${bold(message.id)}, DELIVERED]"
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
event.sendMessage(
|
|
||||||
bold(message.sender) + ARROW + bold(message.recipient) +
|
|
||||||
" [${message.queued.toUtcDateTime()}, ID: ${bold(message.id)}, QUEUED]"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
event.sendMessage(helpFormat(message.message))
|
|
||||||
}
|
}
|
||||||
|
if (message.isReceived) {
|
||||||
|
event.sendMessage(
|
||||||
|
message.sender.bold() + ARROW + message.recipient.bold() +
|
||||||
|
" [${message.receptionDate.toUtcDateTime()}, ID: ${message.id.bold()}, DELIVERED]"
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
event.sendMessage(
|
||||||
|
message.sender.bold() + ARROW + message.recipient.bold() +
|
||||||
|
" [${message.queued.toUtcDateTime()}, ID: ${message.id.bold()}, QUEUED]"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
event.sendMessage(helpFormat(message.message))
|
||||||
}
|
}
|
||||||
if (!hasMessage) {
|
if (!hasMessage) {
|
||||||
event.sendMessage("You have no messages in the queue.")
|
event.sendMessage("You have no messages in the queue.")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue