mirror of
https://github.com/HMCore/Orbot.git
synced 2025-12-10 21:06:18 +00:00
Add self-configuration feature
This commit is contained in:
62
.idea/workspace.xml
generated
62
.idea/workspace.xml
generated
@@ -1,9 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="1aabf22b-2f57-46ac-9973-367d8668ffd3" name="Default Changelist" comment="[1.1]">
|
||||
<list default="true" id="1aabf22b-2f57-46ac-9973-367d8668ffd3" name="Default Changelist" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/kotlin/de/wulkanat/Admin.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/de/wulkanat/Admin.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/kotlin/de/wulkanat/Channels.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/de/wulkanat/Channels.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/kotlin/de/wulkanat/OwnerCli.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/de/wulkanat/OwnerCli.kt" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@@ -104,7 +106,7 @@
|
||||
<component name="PropertiesComponent">
|
||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/src" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/build/libs" />
|
||||
<property name="project.structure.last.edited" value="Modules" />
|
||||
<property name="project.structure.proportion" value="0.15" />
|
||||
<property name="project.structure.side.proportion" value="0.2" />
|
||||
@@ -115,6 +117,7 @@
|
||||
<recent name="de.wulkanat" />
|
||||
</key>
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="E:\Projects\Kotlin_Proj\HytaleUpdateBot\build\libs" />
|
||||
<recent name="E:\Projects\Kotlin_Proj\HytaleUpdateBot\src" />
|
||||
</key>
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
@@ -122,7 +125,7 @@
|
||||
<recent name="E:\Projects\Kotlin_Proj\HytaleUpdateBot\src\main\kotlin\de\wulkanat" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager" selected="Gradle.HytaleUpdateBot [fatJar]">
|
||||
<component name="RunManager" selected="Kotlin.MainKt">
|
||||
<configuration name="HytaleUpdateBot [build]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
@@ -199,8 +202,8 @@
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="Gradle.HytaleUpdateBot [fatJar]" />
|
||||
<item itemvalue="Kotlin.MainKt" />
|
||||
<item itemvalue="Gradle.HytaleUpdateBot [fatJar]" />
|
||||
<item itemvalue="Gradle.HytaleUpdateBot [build]" />
|
||||
<item itemvalue="Gradle.HytaleUpdateBot [clean]" />
|
||||
<item itemvalue="JAR Application.HytaleUpdateBot-all-1.0-SNAPSHOT.jar" />
|
||||
@@ -232,7 +235,14 @@
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1597438052596</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="3" />
|
||||
<task id="LOCAL-00003" summary="[1.1]">
|
||||
<created>1597438317540</created>
|
||||
<option name="number" value="00003" />
|
||||
<option name="presentableId" value="LOCAL-00003" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1597438317540</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="4" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
@@ -241,10 +251,10 @@
|
||||
<option name="LAST_COMMIT_MESSAGE" value="[1.1]" />
|
||||
</component>
|
||||
<component name="WindowStateProjectService">
|
||||
<state x="552" y="179" key="#Project_Structure" timestamp="1597434105164">
|
||||
<state x="552" y="179" key="#Project_Structure" timestamp="1597687666334">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="552" y="179" key="#Project_Structure/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597434105164" />
|
||||
<state x="552" y="179" key="#Project_Structure/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597687666334" />
|
||||
<state x="-1050" y="581" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1597352463714">
|
||||
<screen x="-1050" y="105" width="1050" height="1640" />
|
||||
</state>
|
||||
@@ -265,30 +275,34 @@
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="128" y="270" width="490" height="591" key="#xdebugger.evaluate/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597332665464" />
|
||||
<state x="569" y="115" key="CommitChangelistDialog2" timestamp="1597438290366">
|
||||
<state x="569" y="115" key="CommitChangelistDialog2" timestamp="1597438316655">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="569" y="115" key="CommitChangelistDialog2/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438290366" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.bottom" timestamp="1597438298864">
|
||||
<state x="569" y="115" key="CommitChangelistDialog2/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438316655" />
|
||||
<state x="740" y="238" key="FileChooserDialogImpl" timestamp="1597605616287">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="740" y="238" key="FileChooserDialogImpl/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597605616287" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.bottom" timestamp="1597703826263">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1006" height="588" key="GridCell.Tab.0.bottom/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@-1050.105.1050.1640" timestamp="1597351329412" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.bottom/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438298864" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.center" timestamp="1597438298864">
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.bottom/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597703826263" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.center" timestamp="1597703826263">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1006" height="588" key="GridCell.Tab.0.center/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@-1050.105.1050.1640" timestamp="1597351329411" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.center/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438298864" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.left" timestamp="1597438298864">
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.center/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597703826263" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.left" timestamp="1597703826263">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1006" height="588" key="GridCell.Tab.0.left/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@-1050.105.1050.1640" timestamp="1597351329411" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.left/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438298864" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.right" timestamp="1597438298864">
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.left/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597703826263" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.right" timestamp="1597703826263">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1006" height="588" key="GridCell.Tab.0.right/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@-1050.105.1050.1640" timestamp="1597351329411" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.right/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438298864" />
|
||||
<state width="1876" height="161" key="GridCell.Tab.0.right/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597703826263" />
|
||||
<state width="1006" height="588" key="GridCell.Tab.1.bottom" timestamp="1597366506508">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
@@ -318,18 +332,22 @@
|
||||
</state>
|
||||
<state x="-1040" y="568" key="SettingsEditor/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@-1050.105.1050.1640" timestamp="1597353858648" />
|
||||
<state x="94" y="257" key="SettingsEditor/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597361509050" />
|
||||
<state x="552" y="254" key="Vcs.Push.Dialog.v2" timestamp="1597438121430">
|
||||
<state x="552" y="254" key="Vcs.Push.Dialog.v2" timestamp="1597438319085">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="552" y="254" key="Vcs.Push.Dialog.v2/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438121430" />
|
||||
<state x="552" y="254" key="Vcs.Push.Dialog.v2/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597438319085" />
|
||||
<state x="2582" y="100" key="new project wizard" timestamp="1597605657341">
|
||||
<screen x="1920" y="-213" width="2560" height="1400" />
|
||||
</state>
|
||||
<state x="2582" y="100" key="new project wizard/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@1920.-213.2560.1400" timestamp="1597605657341" />
|
||||
<state x="616" y="240" key="run.anything.popup" timestamp="1597325088886">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="616" y="240" key="run.anything.popup/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597325088886" />
|
||||
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup" timestamp="1597363843473">
|
||||
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup" timestamp="1597702900013">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597363843473" />
|
||||
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup/0.0.1920.1040/1920.-213.2560.1400/-1050.105.1050.1640@0.0.1920.1040" timestamp="1597702900013" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<watches-manager>
|
||||
|
||||
12
README.md
12
README.md
@@ -1,8 +1,14 @@
|
||||
# BlogShot
|
||||
A bot that automatically polls the newest blogpost from [Hytale News Tab](https://www.hytale.com/news) and posts a message into servers if there is a new one.
|
||||
## Setup
|
||||
Okay, this isn't really meant for you to setup, if you want it though it first is easier to just dm me on Twitter [@tale_talk](https://twitter.com/tale_talk) so I can add you to the server list.
|
||||
If you *really* want to set it up yourself, fine.
|
||||
## Add to your server
|
||||
Click [this](https://discord.com/api/oauth2/authorize?client_id=743447329901641799&permissions=150528&scope=bot) link to invite
|
||||
the bot to your server. Please note that only people with *Administrator* permission will be able to
|
||||
configure it.
|
||||
|
||||
You can type `%!info` to get an overview over all available commands.
|
||||
|
||||
## Self Hosting
|
||||
Okay, this isn't really meant for you to setup, but if you *really* want to set it up yourself, fine.
|
||||
* first go to the release tab, download the jar, and put it in a folder
|
||||
* Add two files in the root of the repo, an `admin.json` and a `servers.json`.
|
||||
Add your Discord ID (not name), Bot token, and update frequency to the `admin.json`:
|
||||
|
||||
@@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
group 'de.wulkanat'
|
||||
version '1.1'
|
||||
version '1.2'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
||||
@@ -49,7 +49,7 @@ object Admin {
|
||||
kotlin.io.println("Connected to ${admin!!.name}. No further errors will be printed here.")
|
||||
}
|
||||
}
|
||||
private var admin: User? = null
|
||||
var admin: User? = null
|
||||
|
||||
fun println(msg: String) {
|
||||
sendDevMessage(
|
||||
@@ -71,12 +71,19 @@ object Admin {
|
||||
)
|
||||
}
|
||||
|
||||
fun error(msg: String, error: String) {
|
||||
fun error(msg: String, error: String, author: User? = null) {
|
||||
sendDevMessage(
|
||||
EmbedBuilder()
|
||||
.setTitle(msg)
|
||||
.setDescription(error)
|
||||
.setColor(Color.RED)
|
||||
.run {
|
||||
if (author == null) {
|
||||
this
|
||||
} else {
|
||||
this.setAuthor(author.asTag, author.avatarUrl, author.avatarUrl)
|
||||
}
|
||||
}
|
||||
.build()
|
||||
, "$msg\n\n${error}"
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@ import net.dv8tion.jda.api.events.ExceptionEvent
|
||||
import net.dv8tion.jda.api.events.message.priv.PrivateMessageReceivedEvent
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class Cli : ListenerAdapter() {
|
||||
class AdminCli : ListenerAdapter() {
|
||||
override fun onPrivateMessageReceived(event: PrivateMessageReceivedEvent) {
|
||||
val msg = event.message.contentRaw
|
||||
if (event.author.idLong != Admin.userId ||
|
||||
@@ -8,6 +8,7 @@ import net.dv8tion.jda.api.JDA
|
||||
import net.dv8tion.jda.api.Permission
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed
|
||||
import net.dv8tion.jda.api.entities.TextChannel
|
||||
import net.dv8tion.jda.api.exceptions.ErrorResponseException
|
||||
|
||||
object Channels {
|
||||
var jda: JDA? = null
|
||||
@@ -23,20 +24,24 @@ object Channels {
|
||||
return
|
||||
|
||||
for (channel_pair in channels) {
|
||||
val channel = jda!!.getTextChannelById(channel_pair.id) ?: continue
|
||||
try {
|
||||
val channel = jda!!.getTextChannelById(channel_pair.id) ?: continue
|
||||
|
||||
if (channel_pair.mentionedRole != null) {
|
||||
val message = if (channel_pair.mentionedRole == "everyone") {
|
||||
"New Blogpost @everyone"
|
||||
} else {
|
||||
"New Blogpost <@&${channel_pair.mentionedRole}>"
|
||||
if (channel_pair.mentionedRole != null) {
|
||||
val message = if (channel_pair.mentionedRole == "everyone") {
|
||||
"New Blogpost @everyone"
|
||||
} else {
|
||||
"New Blogpost <@&${channel_pair.mentionedRole}>"
|
||||
}
|
||||
channel.sendMessage(message).queue()
|
||||
}
|
||||
channel.sendMessage(message).queue()
|
||||
}
|
||||
channel.sendMessage(messageEmbed).queue {
|
||||
if (channel_pair.autoPublish) {
|
||||
it.crosspost().queue()
|
||||
channel.sendMessage(messageEmbed).queue {
|
||||
if (channel_pair.autoPublish) {
|
||||
it.crosspost().queue()
|
||||
}
|
||||
}
|
||||
} catch (e: ErrorResponseException) {
|
||||
Admin.error("Error in server", e.message ?: e.localizedMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,11 +71,11 @@ object Channels {
|
||||
).toMutableList()
|
||||
}
|
||||
|
||||
fun getServerNames(): List<String> {
|
||||
fun getServerNames(server: Long? = null): List<String> {
|
||||
if (jda == null)
|
||||
return listOf()
|
||||
|
||||
return channels.map {
|
||||
return channels.filter { server == null || (jda!!.getTextChannelById(it.id)?.guild?.idLong == server) }.map {
|
||||
val channel = jda!!.getTextChannelById(it.id)
|
||||
if (channel == null) {
|
||||
Admin.warning("Channel ${it.id} is no longer active!")
|
||||
@@ -80,7 +85,7 @@ object Channels {
|
||||
val role = when (it.mentionedRole) {
|
||||
null -> ""
|
||||
"everyone" -> " @everyone"
|
||||
else -> " @${channel.guild.getRoleById(it.mentionedRole)?.name}"
|
||||
else -> " @${channel.guild.getRoleById(it.mentionedRole ?: "")?.name}"
|
||||
}
|
||||
"**${channel.guild.name}**\n#${channel.name}${role}"
|
||||
}
|
||||
@@ -90,12 +95,17 @@ object Channels {
|
||||
return jda?.getTextChannelById(id)
|
||||
}
|
||||
|
||||
fun addChannel(id: Long, role: String?) {
|
||||
channels.add(DiscordChannel(id, role))
|
||||
fun addChannel(id: Long, role: String?): DiscordChannel? {
|
||||
if (channels.find { it.id == id } != null) {
|
||||
return null
|
||||
}
|
||||
val out = DiscordChannel(id, role)
|
||||
channels.add(out)
|
||||
saveChannels()
|
||||
return out
|
||||
}
|
||||
|
||||
private fun saveChannels() {
|
||||
fun saveChannels() {
|
||||
SERVERS_FILE.writeText(
|
||||
json.stringify(
|
||||
DiscordChannel.serializer().list,
|
||||
|
||||
@@ -6,8 +6,8 @@ import java.io.File
|
||||
@Serializable
|
||||
data class DiscordChannel(
|
||||
val id: Long,
|
||||
val mentionedRole: String? = null,
|
||||
val autoPublish: Boolean = false
|
||||
var mentionedRole: String? = null,
|
||||
var autoPublish: Boolean = false
|
||||
)
|
||||
|
||||
@Serializable
|
||||
|
||||
@@ -13,8 +13,9 @@ fun main() {
|
||||
.setActivity(Activity.watching("for new Blogposts"))
|
||||
.build()
|
||||
|
||||
builder.addEventListener(Cli())
|
||||
builder.addEventListener(AdminCli())
|
||||
builder.addEventListener(ErrorHandler())
|
||||
builder.addEventListener(OwnerCli())
|
||||
builder.awaitReady()
|
||||
|
||||
Channels.jda = builder
|
||||
|
||||
131
src/main/kotlin/de/wulkanat/OwnerCli.kt
Normal file
131
src/main/kotlin/de/wulkanat/OwnerCli.kt
Normal file
@@ -0,0 +1,131 @@
|
||||
package de.wulkanat
|
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder
|
||||
import net.dv8tion.jda.api.Permission
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter
|
||||
import java.awt.Color
|
||||
|
||||
class OwnerCli : ListenerAdapter() {
|
||||
private val prefix = "%!"
|
||||
|
||||
override fun onMessageReceived(event: MessageReceivedEvent) {
|
||||
val msg = event.message.contentRaw
|
||||
// Only accept admin requests
|
||||
if (event.message.member?.hasPermission(Permission.ADMINISTRATOR) != true || !msg.startsWith(prefix)) {
|
||||
return
|
||||
}
|
||||
|
||||
val command = msg.removePrefix(prefix).split(Regex("\\s+"))
|
||||
val channelId = event.message.channel.idLong
|
||||
|
||||
when (command.first()) {
|
||||
"add" -> {
|
||||
val result = Channels.addChannel(channelId, null)
|
||||
if (result == null) {
|
||||
event.message.channel.sendMessage("Already added.").queue()
|
||||
} else {
|
||||
event.message.channel.sendMessage("Added.").queue()
|
||||
Admin.info()
|
||||
}
|
||||
}
|
||||
"remove" -> {
|
||||
val result = Channels.channels.removeAll { it.id == channelId }
|
||||
Channels.saveChannels()
|
||||
if (result) {
|
||||
event.message.channel.sendMessage("Removed.").queue()
|
||||
} else {
|
||||
event.message.channel.sendMessage("This channel is not registered.").queue()
|
||||
}
|
||||
}
|
||||
"publish" -> {
|
||||
val result = Channels.channels.find { it.id == channelId }
|
||||
if (result != null) {
|
||||
if (command.size > 1 && listOf("on", "off").contains(command[1])) {
|
||||
result.autoPublish = command[1] == "on"
|
||||
Channels.saveChannels()
|
||||
|
||||
event.message.channel.sendMessage("Auto publish is now ${command[1]}").queue()
|
||||
} else {
|
||||
event.message.channel.sendMessage("Usage: `${prefix}publish [on|off]`")
|
||||
}
|
||||
} else {
|
||||
event.message.channel.sendMessage("Added.").queue()
|
||||
}
|
||||
}
|
||||
"ping" -> {
|
||||
val result = Channels.channels.find { it.id == channelId }
|
||||
if (result != null) {
|
||||
if (command.size > 1) {
|
||||
val roles = event.message.guild.getRolesByName(command[1], false)
|
||||
result.mentionedRole = when {
|
||||
command[1] == "everyone" -> {
|
||||
event.message.channel.sendMessage("Now pinging everyone.").queue()
|
||||
"everyone"
|
||||
}
|
||||
command[1] == "none" -> {
|
||||
event.message.channel.sendMessage("Now pinging none.").queue()
|
||||
null
|
||||
}
|
||||
roles.firstOrNull() != null -> {
|
||||
event.message.channel.sendMessage("Now pinging ${roles.first().name}").queue()
|
||||
roles.first().id
|
||||
}
|
||||
else -> {
|
||||
event.message.channel.sendMessage("Unknown role.").queue()
|
||||
result.mentionedRole
|
||||
}
|
||||
}
|
||||
Channels.saveChannels()
|
||||
} else {
|
||||
event.message.channel.sendMessage("Usage: `${prefix}ping [everyone|none|roleName]`")
|
||||
}
|
||||
} else {
|
||||
event.message.channel.sendMessage("Channel is not registered.").queue()
|
||||
}
|
||||
}
|
||||
"info" -> {
|
||||
event.message.channel.sendMessage(EmbedBuilder()
|
||||
.setTitle("Server overview")
|
||||
.setColor(Color.GREEN)
|
||||
.setDescription(Channels.getServerNames(event.message.guild.idLong).joinToString("\n"))
|
||||
.setAuthor(Admin.admin?.name, Admin.admin?.avatarUrl, Admin.admin?.avatarUrl)
|
||||
.build()).queue()
|
||||
}
|
||||
"report" -> {
|
||||
val errorReport = event.message.contentRaw.removePrefix("${prefix}report")
|
||||
Admin.error(event.message.guild.name, errorReport, event.author)
|
||||
event.message.channel.sendMessage(EmbedBuilder()
|
||||
.setTitle("Error Report Received")
|
||||
.setColor(Color.RED)
|
||||
.setDescription(errorReport)
|
||||
.setAuthor(Admin.admin?.name, Admin.admin?.avatarUrl, Admin.admin?.avatarUrl)
|
||||
.build()).queue()
|
||||
}
|
||||
"help" -> {
|
||||
event.message.channel.sendMessage(EmbedBuilder()
|
||||
.setTitle("Help")
|
||||
.setColor(Color.YELLOW)
|
||||
.setAuthor(Admin.admin?.name, Admin.admin?.avatarUrl, Admin.admin?.avatarUrl)
|
||||
.setDescription(
|
||||
"""
|
||||
**${prefix}add**
|
||||
Add this channel to the notified list
|
||||
**${prefix}remove**
|
||||
Remove this channel to the notified list
|
||||
**${prefix}publish [on|off]**
|
||||
[Community|Partner|Verified only] Auto publish the message if in an announcement channel
|
||||
**${prefix}ping [none|everyone|roleName]**
|
||||
What role to ping
|
||||
**${prefix}info**
|
||||
Show an overview about all channels registered on this server
|
||||
**${prefix}report**
|
||||
Report an issue to the Bot Admin (this will share your user name so they can contact you)
|
||||
**${prefix}help**
|
||||
Show this message
|
||||
""".trimIndent())
|
||||
.build()).queue()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,6 @@ object SiteWatcher {
|
||||
var newestBlog: BlogPostPreview? = null
|
||||
|
||||
fun hasNewBlogPost(): Boolean {
|
||||
Admin.silent("Updating...")
|
||||
|
||||
try {
|
||||
val doc = Jsoup.connect(BLOG_INDEX_URL).get()
|
||||
val newBlog = BlogPostParser.getFistBlog(doc)
|
||||
|
||||
Reference in New Issue
Block a user