Reworked ModuleException.
This commit is contained in:
parent
29eae2e7ee
commit
3ea0e4b3ac
11 changed files with 58 additions and 49 deletions
|
@ -35,6 +35,7 @@
|
||||||
<ID>MagicNumber:View.kt$View$6</ID>
|
<ID>MagicNumber:View.kt$View$6</ID>
|
||||||
<ID>MagicNumber:Weather2.kt$Weather2.Companion$1.60934</ID>
|
<ID>MagicNumber:Weather2.kt$Weather2.Companion$1.60934</ID>
|
||||||
<ID>MagicNumber:Weather2.kt$Weather2.Companion$32</ID>
|
<ID>MagicNumber:Weather2.kt$Weather2.Companion$32</ID>
|
||||||
|
<ID>MagicNumber:Weather2.kt$Weather2.Companion$404</ID>
|
||||||
<ID>MagicNumber:Weather2.kt$Weather2.Companion$5</ID>
|
<ID>MagicNumber:Weather2.kt$Weather2.Companion$5</ID>
|
||||||
<ID>MagicNumber:Weather2.kt$Weather2.Companion$9</ID>
|
<ID>MagicNumber:Weather2.kt$Weather2.Companion$9</ID>
|
||||||
<ID>MagicNumber:WorldTime.kt$WorldTime$14</ID>
|
<ID>MagicNumber:WorldTime.kt$WorldTime$14</ID>
|
||||||
|
|
|
@ -210,13 +210,13 @@ class CurrencyConverter : ThreadedModule() {
|
||||||
EXCHANGE_RATES["EUR"] = "1"
|
EXCHANGE_RATES["EUR"] = "1"
|
||||||
} catch (e: JDOMException) {
|
} catch (e: JDOMException) {
|
||||||
throw ModuleException(
|
throw ModuleException(
|
||||||
e.message,
|
"loadRates(): JDOM",
|
||||||
"An JDOM parsing error has occurred while parsing the exchange rates table.",
|
"An JDOM parsing error has occurred while parsing the exchange rates table.",
|
||||||
e
|
e
|
||||||
)
|
)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
throw ModuleException(
|
throw ModuleException(
|
||||||
e.message,
|
"loadRates(): IOE",
|
||||||
"An IO error has occurred while parsing the exchange rates table.",
|
"An IO error has occurred while parsing the exchange rates table.",
|
||||||
e
|
e
|
||||||
)
|
)
|
||||||
|
|
|
@ -70,7 +70,9 @@ class GoogleSearch : ThreadedModule() {
|
||||||
}
|
}
|
||||||
} catch (e: ModuleException) {
|
} catch (e: ModuleException) {
|
||||||
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
||||||
event.sendMessage(e.message!!)
|
e.message?.let {
|
||||||
|
event.sendMessage(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
helpResponse(event)
|
helpResponse(event)
|
||||||
|
@ -94,7 +96,10 @@ class GoogleSearch : ThreadedModule() {
|
||||||
@Throws(ModuleException::class)
|
@Throws(ModuleException::class)
|
||||||
fun searchGoogle(query: String, apiKey: String?, cseKey: String?): List<Message> {
|
fun searchGoogle(query: String, apiKey: String?, cseKey: String?): List<Message> {
|
||||||
if (apiKey.isNullOrBlank() || cseKey.isNullOrBlank()) {
|
if (apiKey.isNullOrBlank() || cseKey.isNullOrBlank()) {
|
||||||
throw ModuleException("${GOOGLE_CMD.capitalise()} is disabled. The API keys are missing.")
|
throw ModuleException(
|
||||||
|
"${GoogleSearch::class.java.name} is disabled.",
|
||||||
|
"${GOOGLE_CMD.capitalise()} is disabled. The API keys are missing."
|
||||||
|
)
|
||||||
}
|
}
|
||||||
val results = mutableListOf<Message>()
|
val results = mutableListOf<Message>()
|
||||||
if (query.isNotBlank()) {
|
if (query.isNotBlank()) {
|
||||||
|
@ -115,9 +120,13 @@ class GoogleSearch : ThreadedModule() {
|
||||||
results.add(ErrorMessage("No results found.", Colors.RED))
|
results.add(ErrorMessage("No results found.", Colors.RED))
|
||||||
}
|
}
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
throw ModuleException("searchGoogle($query)", "An IO error has occurred searching Google.", e)
|
throw ModuleException("searchGoogle($query): IOE", "An IO error has occurred searching Google.", e)
|
||||||
} catch (e: JSONException) {
|
} catch (e: JSONException) {
|
||||||
throw ModuleException("searchGoogle($query)", "A JSON error has occurred searching Google.", e)
|
throw ModuleException(
|
||||||
|
"searchGoogle($query): JSON",
|
||||||
|
"A JSON error has occurred searching Google.",
|
||||||
|
e
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
results.add(ErrorMessage("Invalid query. Please try again."))
|
results.add(ErrorMessage("Invalid query. Please try again."))
|
||||||
|
|
|
@ -69,7 +69,9 @@ class Joke : ThreadedModule() {
|
||||||
sendIRC().notice(channel, cyan(randomJoke().msg))
|
sendIRC().notice(channel, cyan(randomJoke().msg))
|
||||||
} catch (e: ModuleException) {
|
} catch (e: ModuleException) {
|
||||||
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
||||||
event.sendMessage(e.message!!)
|
e.message?.let {
|
||||||
|
event.sendMessage(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,9 +98,9 @@ class Joke : ThreadedModule() {
|
||||||
.replace("\\\"", "\"")
|
.replace("\\\"", "\"")
|
||||||
)
|
)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
throw ModuleException("randomJoke()", "An IO error has occurred retrieving a random joke.", e)
|
throw ModuleException("randomJoke(): IOE", "An IO error has occurred retrieving a random joke.", e)
|
||||||
} catch (e: JSONException) {
|
} catch (e: JSONException) {
|
||||||
throw ModuleException("randomJoke()", "An JSON error has occurred retrieving a random joke.", e)
|
throw ModuleException("randomJoke(): JSON", "An JSON error has occurred retrieving a random joke.", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,33 +34,11 @@ package net.thauvin.erik.mobibot.modules
|
||||||
/**
|
/**
|
||||||
* The `ModuleException` class.
|
* The `ModuleException` class.
|
||||||
*/
|
*/
|
||||||
class ModuleException : Exception {
|
class ModuleException @JvmOverloads constructor(
|
||||||
/**
|
val debugMessage: String,
|
||||||
* Returns the debug message.
|
message: String? = null,
|
||||||
*/
|
cause: Throwable? = null
|
||||||
val debugMessage: String?
|
) : Exception(message, cause) {
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new exception.
|
|
||||||
*/
|
|
||||||
constructor(message: String?) : super(message) {
|
|
||||||
debugMessage = message
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new exception.
|
|
||||||
*/
|
|
||||||
constructor(debugMessage: String?, message: String?, cause: Throwable?) : super(message, cause) {
|
|
||||||
this.debugMessage = debugMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new exception.
|
|
||||||
*/
|
|
||||||
constructor(debugMessage: String?, message: String?) : super(message) {
|
|
||||||
this.debugMessage = debugMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val serialVersionUID = 1L
|
private const val serialVersionUID = 1L
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,9 @@ class StockQuote : ThreadedModule() {
|
||||||
}
|
}
|
||||||
} catch (e: ModuleException) {
|
} catch (e: ModuleException) {
|
||||||
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
||||||
event.sendMessage(e.message!!)
|
e.message?.let {
|
||||||
|
event.sendMessage(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
helpResponse(event)
|
helpResponse(event)
|
||||||
|
@ -129,6 +131,7 @@ class StockQuote : ThreadedModule() {
|
||||||
fun getQuote(symbol: String, apiKey: String?): List<Message> {
|
fun getQuote(symbol: String, apiKey: String?): List<Message> {
|
||||||
if (apiKey.isNullOrBlank()) {
|
if (apiKey.isNullOrBlank()) {
|
||||||
throw ModuleException(
|
throw ModuleException(
|
||||||
|
"${StockQuote::class.java.name} is disabled.",
|
||||||
"${STOCK_CMD.capitalise()} is disabled. The API key is missing."
|
"${STOCK_CMD.capitalise()} is disabled. The API key is missing."
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -216,9 +219,9 @@ class StockQuote : ThreadedModule() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
throw ModuleException(debugMessage, "An IO error has occurred retrieving a stock quote.", e)
|
throw ModuleException("$debugMessage: IOE", "An IO error has occurred retrieving a stock quote.", e)
|
||||||
} catch (e: NullPointerException) {
|
} catch (e: NullPointerException) {
|
||||||
throw ModuleException(debugMessage, "An error has occurred retrieving a stock quote.", e)
|
throw ModuleException("$debugMessage: NPE", "An error has occurred retrieving a stock quote.", e)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
messages.add(ErrorMessage(INVALID_SYMBOL))
|
messages.add(ErrorMessage(INVALID_SYMBOL))
|
||||||
|
|
|
@ -167,7 +167,9 @@ class Twitter : ThreadedModule() {
|
||||||
event.respond(post(event.user.nick, "$args (by ${event.user.nick} on $channel)", false))
|
event.respond(post(event.user.nick, "$args (by ${event.user.nick} on $channel)", false))
|
||||||
} catch (e: ModuleException) {
|
} catch (e: ModuleException) {
|
||||||
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
||||||
event.respond(e.message)
|
e.message?.let {
|
||||||
|
event.respond(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,9 @@ class Weather2 : ThreadedModule() {
|
||||||
}
|
}
|
||||||
} catch (e: ModuleException) {
|
} catch (e: ModuleException) {
|
||||||
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
if (logger.isWarnEnabled) logger.warn(e.debugMessage, e)
|
||||||
event.respond(e.message)
|
e.message?.let {
|
||||||
|
event.respond(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
helpResponse(event)
|
helpResponse(event)
|
||||||
|
@ -116,7 +118,10 @@ class Weather2 : ThreadedModule() {
|
||||||
@Throws(ModuleException::class)
|
@Throws(ModuleException::class)
|
||||||
fun getWeather(query: String, apiKey: String?): List<Message> {
|
fun getWeather(query: String, apiKey: String?): List<Message> {
|
||||||
if (apiKey.isNullOrBlank()) {
|
if (apiKey.isNullOrBlank()) {
|
||||||
throw ModuleException("${WEATHER_CMD.capitalise()} is disabled. The API key is missing.")
|
throw ModuleException(
|
||||||
|
"${Weather2::class.java.name} is disabled.",
|
||||||
|
"${WEATHER_CMD.capitalise()} is disabled. The API key is missing."
|
||||||
|
)
|
||||||
}
|
}
|
||||||
val owm = OWM(apiKey)
|
val owm = OWM(apiKey)
|
||||||
val messages = mutableListOf<Message>()
|
val messages = mutableListOf<Message>()
|
||||||
|
@ -199,9 +204,17 @@ class Weather2 : ThreadedModule() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: APIException) {
|
} catch (e: APIException) {
|
||||||
throw ModuleException("getWeather($query)", e.message, e)
|
if (e.code == 404) {
|
||||||
|
throw ModuleException(
|
||||||
|
"getWeather($query): API ${e.code}",
|
||||||
|
"The requested city was not found.",
|
||||||
|
e
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
throw ModuleException("getWeather($query): API ${e.code}", e.message, e)
|
||||||
|
}
|
||||||
} catch (e: NullPointerException) {
|
} catch (e: NullPointerException) {
|
||||||
throw ModuleException("getWeather($query)", "Unable to perform weather lookup.", e)
|
throw ModuleException("getWeather($query): NPE", "Unable to perform weather lookup.", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,5 +34,6 @@ package net.thauvin.erik.mobibot.msg
|
||||||
/**
|
/**
|
||||||
* The `PrivateMessage` class.
|
* The `PrivateMessage` class.
|
||||||
*/
|
*/
|
||||||
|
@Suppress("unused")
|
||||||
class PrivateMessage @JvmOverloads constructor(msg: String, color: String = DEFAULT_COLOR) :
|
class PrivateMessage @JvmOverloads constructor(msg: String, color: String = DEFAULT_COLOR) :
|
||||||
Message(msg, color, isPrivate = true)
|
Message(msg, color, isPrivate = true)
|
||||||
|
|
|
@ -89,14 +89,14 @@ class ModuleExceptionTest {
|
||||||
e = ModuleException(debugMessage, message, IOException())
|
e = ModuleException(debugMessage, message, IOException())
|
||||||
assertThat(e.sanitize(apiKey), "no cause message").hasMessage(message)
|
assertThat(e.sanitize(apiKey), "no cause message").hasMessage(message)
|
||||||
|
|
||||||
e = ModuleException(apiKey)
|
e = ModuleException(debugMessage, apiKey)
|
||||||
assertThat(e.sanitize(apiKey).message, "api key in message").isNotNull().doesNotContain(apiKey)
|
assertThat(e.sanitize(apiKey).message, "api key in message").isNotNull().doesNotContain(apiKey)
|
||||||
|
|
||||||
val msg: String? = null
|
val msg: String? = null
|
||||||
e = ModuleException(debugMessage, msg, IOException(msg))
|
e = ModuleException(debugMessage, msg, IOException(msg))
|
||||||
assertThat(e.sanitize(apiKey).message, "null message").isNull()
|
assertThat(e.sanitize(apiKey).message, "null message").isNull()
|
||||||
|
|
||||||
e = ModuleException(msg, msg, IOException("foo is $apiKey"))
|
e = ModuleException(debugMessage, msg, IOException("foo is $apiKey"))
|
||||||
assertThat(e.sanitize(" ", apiKey, "foo").message, "key in cause").isNotNull().all {
|
assertThat(e.sanitize(" ", apiKey, "foo").message, "key in cause").isNotNull().all {
|
||||||
doesNotContain(apiKey)
|
doesNotContain(apiKey)
|
||||||
endsWith("xxx is xxxxxxxxxx")
|
endsWith("xxx is xxxxxxxxxx")
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#Generated by the Semver Plugin for Gradle
|
#Generated by the Semver Plugin for Gradle
|
||||||
#Tue Nov 09 08:47:23 PST 2021
|
#Sun Nov 14 21:44:14 PST 2021
|
||||||
version.buildmeta=2227
|
version.buildmeta=2262
|
||||||
version.major=0
|
version.major=0
|
||||||
version.minor=8
|
version.minor=8
|
||||||
version.patch=0
|
version.patch=0
|
||||||
version.prerelease=beta
|
version.prerelease=beta
|
||||||
version.project=mobibot
|
version.project=mobibot
|
||||||
version.semver=0.8.0-beta+2227
|
version.semver=0.8.0-beta+2262
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue