commit 72c13e27d42385f438446d7f4aa0deb7ef99fb54 Author: vaporvee Date: Fri Sep 13 01:15:40 2024 +0200 init diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..eef3a56 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +DISCORD_BOT_TOKEN="" +DISCORD_GLOBAL_CHANNEL_ID="1283230743241166888" +DISCORD_CONSOLE_CHANNEL_ID="1283230428366503946" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5fa4df6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.env + +data/* diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9792498 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": false +} \ No newline at end of file diff --git a/configs/DiscordSRV/config.yml b/configs/DiscordSRV/config.yml new file mode 100644 index 0000000..641180e --- /dev/null +++ b/configs/DiscordSRV/config.yml @@ -0,0 +1,354 @@ +# DiscordSRV Configuration +# Need help? Join our Discord, https://discordsrv.com/discord + +# Don't touch pls +ConfigVersion: 1.28.0 + +# Bot token; don't know what this is? Look at the video on the plugin page for instructions +# You must restart your server after changing this option +BotToken: ${CFG_DISCORD_BOT_TOKEN} + +# The proxy to be used for Discord +# Leave this alone if you don't understand what it does +ProxyHost: "https://example.com" +ProxyPort: 1234 +ProxyUser: "USERNAME" +ProxyPassword: "PASSWORD" + +# Channel links from game to Discord +# syntax is Channels: {"in-game channel name from Minecraft": "numerical channel ID from Discord", "another in-game channel name from Minecraft": "another numerical channel ID from Discord"} +# +# All of DiscordSRV's messages will go to the first channel unless there's a channel for that type of messages defined: +# when using a compatible chat plugin, the channel name will be the one from that plugin (for chat messages) +# - If you're using TownyChat, the default channel is usually called "general" instead of "global" +# for player chat messages (when not using a chat plugin): global +# for server start/stop messages: status +# for achievement/advancement messages: awards +# for death messages: deaths +# for join messages: join +# for leave messages: leave +# for dynmap messages: dynmap +# for watchdog messages: watchdog +# for /discord broadcast: broadcasts (unless specified in the command) +# for account linking: link +# +# The first part of channel pairs is not the Discord channel name! +# Run "/discord reload" after changing this option to apply +Channels: {"global": ${CFG_DISCORD_GLOBAL_CHANNEL_ID}} + +# Console channel numerical ID (NOT NAME), leave blank to disable the console channel all together +DiscordConsoleChannelId: ${CFG_DISCORD_CONSOLE_CHANNEL_ID} + +# Invitation link shown to players when using /discord and on the message shown to unlinked players when linking is enforced +DiscordInviteLink: "" + +# Debug information +# Don't enable these unless you're attempting to locate an issue +# +# Available Debug categories: +# MINECRAFT_TO_DISCORD - Messages coming from Minecraft +# DISCORD_TO_MINECRAFT - Messages coming from Discord +# GROUP_SYNC - Group synchronization +# PRESENCE - The bot's game status or presence +# VOICE - The voice module (see voice.yml) +# REQUIRE_LINK - The require link to join module (see linking.yml) +# NICKNAME_SYNC - Nickname synchronization +# ALERTS - Alerts (see alerts.yml) +# WATCHDOG - The watchdog +# BAN_SYNCHRONIZATION - Ban synchronization +# LP_CONTEXTS - LuckPerm's contexts +# ACCOUNT_LINKING - discord/minecraft account linking +# +# UNCATEGORIZED - Anything not in any of the above categories +# ALL - All the above categories (including UNCATEGORIZED) +# +# JDA - JDA's debug messages +# JDA_REST_ACTIONS - For debugging JDA's rest actions +# CALLSTACKS - Displays the stack trace for DiscordSRV debug calls +# +# Ex. "Debug: [GROUP_SYNC, PRESENCE]" +# +Debug: [] + +# Experiments +# These features are not fully optimized; use at your own risk + +# JDBC (MySQL/MariaDB) +Experiment_JdbcAccountLinkBackend: "jdbc:mysql://HOST:PORT/DATABASE?autoReconnect=true&useSSL=false" +Experiment_JdbcTablePrefix: "discordsrv" +Experiment_JdbcUsername: "username" +Experiment_JdbcPassword: "password" + +# Webhook Delivery +Experiment_WebhookChatMessageDelivery: true +Experiment_WebhookChatMessageUsernameFormat: "%displayname%" +Experiment_WebhookChatMessageFormat: "%message%" +Experiment_WebhookChatMessageUsernameFromDiscord: false +Experiment_WebhookChatMessageAvatarFromDiscord: false +Experiment_WebhookChatMessageUsernameFilters: {} + +# Embed & webhook image/avatar url format +# Leave blank to use a default value +# Available placeholders: {texture} {username} {uuid} {uuid-nodashes} {size} +AvatarUrl: "" + +# Reserializer +# Converts formatting (bold, italics, underline, strikethrough) between Minecraft and Discord +Experiment_MCDiscordReserializer_ToDiscord: true +Experiment_MCDiscordReserializer_ToMinecraft: true +Experiment_MCDiscordReserializer_InBroadcast: true + +# Other +CancelConsoleCommandIfLoggingFailed: true +ForcedLanguage: none +ForceTLSv12: true +NoopHostnameVerifier: false +MaximumAttemptsForSystemDNSBeforeUsingFallbackDNS: 3 +TimestampFormat: EEE, d. MMM yyyy HH:mm:ss z +DateFormat: dd-MM-yyy +# https://docs.discordsrv.com/config/#Timezone +Timezone: Europe/Berlin +# MinecraftMentionSound: Whether a sound should be sent to the player in Minecraft when they are mentioned from Discord +MinecraftMentionSound: true + +# Plugin hooks +# You must restart your server after changing these options +# +# DisabledPluginHooks: plugin hooks that will not be used (usually just the name of the plugin). +# VentureChatBungee: enables the VentureChat hook's BungeeCord functionality (messages are received from every server, requires atleast 1 player to be online) +# EnablePresenceInformation: enabled presence information, which is required for some of our PlaceholderAPI placeholders. Keep in mind this requires the "Presence Intent" from the Discord developer portal +# UseModernPaperChatEvent: only use this if you have a chat plugins that SPECIFICALLY utilizes Paper's "AsyncChatEvent" +DisabledPluginHooks: [] +VentureChatBungee: false +EnablePresenceInformation: false +UseModernPaperChatEvent: false + +# Game Information +# Sets the user status for the bot +# Can be a single, static value, or cycle through multiple different options +# You can preface the status with "playing", "watching", "listening to", or "competing" to set the activity type +# You can set your own custom status by not including the prefixes +# %online%: number of online players +# PlaceholderAPI placeholders are supported +# +# DiscordGameStatus: Text to display. Can be a single value e.g. "Minecraft", or multiple values e.g. ["Minecraft", "yourip.changeme.com"] +# DiscordOnlineStatus: Activity status to display. This must be one of the following: ONLINE, DND, IDLE or INVISIBLE +# StatusUpdateRateInMinutes: How frequently to cycle the status +DiscordGameStatus: ["playing Minecraft"] +DiscordOnlineStatus: ONLINE +StatusUpdateRateInMinutes: 2 + +# Chat channel information +# The chat channel is the text channel that all messages in-game will be sent to and all messages sent +# to this channel on Discord will be sent in-game +# +# DiscordChatChannelDiscordToMinecraft: whether to send messages in the chat channel to the server chat +# DiscordChatChannelMinecraftToDiscord: whether to send messages in the server chat to the chat channel +# DiscordChatChannelTruncateLength: the maximum length of messages from Discord to be sent to Minecraft +# DiscordChatChannelTranslateMentions: whether to translate mentions like @Person for Minecraft to Discord messages +# DiscordChatChannelAllowedMentions: types of mentions allowed in Minecraft to Discord messages; types missing from the default value are "role", "here", & "everyone" +# DiscordChatChannelEmojiBehavior: how emojis should be sent to Minecraft. Can be "show", "name" or "hide" +# DiscordChatChannelEmoteBehavior: how emotes should be sent to Minecraft. Can be "name" or "hide" +# DiscordChatChannelPrefixRequiredToProcessMessage: the character(s) required to prefix a message for it to be sent from Minecraft to Discord (example "!") +# DiscordChatChannelPrefixActsAsBlacklist: Whether the prefix should act as a blacklist +# DiscordChatChannelRolesAllowedToUseColorCodesInChat: list of roles allowed to use color/format codes in Discord to Minecraft chat +# DiscordChatChannelBroadcastDiscordMessagesToConsole: whether to print processed discord messages to the console +# DiscordChatChannelRequireLinkedAccount: whether to require players have their Discord account linked to their Minecraft to have their Discord messages sent to Minecraft +# DiscordChatChannelBlockBots: whether bots should be blocked from Discord -> MC chat +# DiscordChatChannelBlockWebhooks: whether webhooks should be blocked from Discord -> MC chat +# DiscordChatChannelBlockedIds: ids of discord users (or bots) that should not have their messages processed & sent to MC +# DiscordChatChannelBlockedRolesAsWhitelist: if the following list should be treated as a whitelist (true) or a blacklist (false) +# DiscordChatChannelBlockedRolesIds: ids of discord roles that should not have their messages processed & sent to MC +# DiscordChatChannelRolesSelectionAsWhitelist: if the following list should be treated as a whitelist (true) or a blacklist (false) +# DiscordChatChannelRolesSelection: list of roles that should be filtered from all of a user's roles +# DiscordChatChannelRoleAliases: list of role aliases (alternate names for roles to use in Minecraft messages) +# +DiscordChatChannelDiscordToMinecraft: true +DiscordChatChannelMinecraftToDiscord: true +DiscordChatChannelTruncateLength: 256 +DiscordChatChannelTranslateMentions: true +DiscordChatChannelAllowedMentions: [user, channel, emote] +DiscordChatChannelEmojiBehavior: "name" +DiscordChatChannelEmoteBehavior: "name" +DiscordChatChannelPrefixRequiredToProcessMessage: "" +DiscordChatChannelPrefixActsAsBlacklist: false +DiscordChatChannelRolesAllowedToUseColorCodesInChat: ["Developer", "Owner", "Admin", "Moderator"] +DiscordChatChannelBroadcastDiscordMessagesToConsole: true +DiscordChatChannelRequireLinkedAccount: false +DiscordChatChannelBlockBots: false +DiscordChatChannelBlockWebhooks: true +DiscordChatChannelBlockedIds: ["000000000000000000", "000000000000000000", "000000000000000000"] +DiscordChatChannelBlockedRolesAsWhitelist: false +DiscordChatChannelBlockedRolesIds: ["000000000000000000", "000000000000000000", "000000000000000000"] +DiscordChatChannelRolesSelectionAsWhitelist: false +DiscordChatChannelRolesSelection: ["Don't show me!", "Misc role"] +DiscordChatChannelRoleAliases: {"Developer": "Dev"} + +# Console channel information +# The console channel is the text channel that receives messages which are then run as server commands +# by the console as well as having the server's console being streamed to line by line +# +# You can customize the message including removing timestamps in messages.yml +# +# DiscordConsoleChannelLogRefreshRateInSeconds: rate in seconds between sending lines from the console +# DiscordConsoleChannelUsageLog: +# %date%: current date +# example: 2017-01-01 +# PlaceholderAPI placeholders are supported +# DiscordConsoleChannelBlacklistActsAsWhitelist: whether the blacklisted commands list acts as a whitelist instead of blacklist +# DiscordConsoleChannelBlacklistedCommands: phrases wrapped in quotation marks that users should not be able to send as commands to the console +# DiscordConsoleChannelFilters: regex filters to be applied to console lines being sent to Discord, if the result is empty the message won't be sent at all +# DiscordConsoleChannelLevels: levels to send to console channel via appender +# DiscordConsoleChannelUseCodeBlocks: if the console should be wrapped in code blocks and colored +# DiscordConsoleChannelBlockBots: whether bots should be allowed to send commands in the console channel +# +DiscordConsoleChannelLogRefreshRateInSeconds: 5 +DiscordConsoleChannelUsageLog: "Console-%date%.log" +DiscordConsoleChannelBlacklistActsAsWhitelist: false +DiscordConsoleChannelBlacklistedCommands: ["?", "op", "deop", "execute"] +DiscordConsoleChannelFilters: {".*(?i)async chat thread.*": "", ".*There are \\d+ (?:of a max of|out of maximum) \\d+ players online.*": ""} +DiscordConsoleChannelLevels: [info, warn, error] +DiscordConsoleChannelUseCodeBlocks: true +DiscordConsoleChannelBlockBots: true + +# Chat channel command execute command +# These options control the ability to say "!c kick Notch", or whatever the prefix is to run a command, +# as the console, from a registered chat channel. +# +# DiscordChatChannelConsoleCommandEnabled: whether to allow console commands from a chat channel. +# DiscordChatChannelConsoleCommandNotifyErrors: whether to send a user who tries to run a command without permission that they don't have permission +# DiscordChatChannelConsoleCommandPrefix: prefix to use for console commands. e.g. "!c tps" +# DiscordChatChannelConsoleCommandRolesAllowed: the user roles that are allowed to execute server commands from the chat channel +# DiscordChatChannelConsoleCommandWhitelist: list of commands that are able to be ran with DiscordChatChannelConsoleCommandPrefix +# DiscordChatChannelConsoleCommandWhitelistBypassRoles: list of roles that bypass the whitelist +# DiscordChatChannelConsoleCommandWhitelistActsAsBlacklist: should the command whitelist act as a blacklist instead +# DiscordChatChannelConsoleCommandExpiration: time in seconds until a sent command output is automatically removed by the bot. set to 0 to disable expiration. +# DiscordChatChannelConsoleCommandExpirationDeleteRequest: whether to delete the message of the person that originally issued the command +# +DiscordChatChannelConsoleCommandEnabled: true +DiscordChatChannelConsoleCommandNotifyErrors: true +DiscordChatChannelConsoleCommandPrefix: "!c" +DiscordChatChannelConsoleCommandRolesAllowed: ["Owner", "Developer", "Admin"] +DiscordChatChannelConsoleCommandWhitelist: ["say", "lag", "tps"] +DiscordChatChannelConsoleCommandWhitelistBypassRoles: ["Owner", "Developer"] +DiscordChatChannelConsoleCommandWhitelistActsAsBlacklist: false +DiscordChatChannelConsoleCommandExpiration: 0 +DiscordChatChannelConsoleCommandExpirationDeleteRequest: true + +# Chat channel player list command +# All the config stuff for the player list command +# +# DiscordChatChannelListCommandEnabled: whether the command is enabled +# DiscordChatChannelListCommandMessage: the command people can type to get the player list +# DiscordChatChannelListCommandExpiration: time in seconds until a sent player list message is automatically removed by the bot. set to 0 to disable expiration. +# DiscordChatChannelListCommandExpirationDeleteRequest: whether to delete the message of the person that originally requested for the player list +# +DiscordChatChannelListCommandEnabled: true +DiscordChatChannelListCommandMessage: "playerlist" +DiscordChatChannelListCommandExpiration: 10 +DiscordChatChannelListCommandExpirationDeleteRequest: true + +# Chat channel blacklisted phrases & regex +# +# DiscordChatChannelGameFilters: regex filters to be applied to chat messages being sent to Discord, if the result is empty the message won't be sent at all +# DiscordChatChannelDiscordFilters: regex filters to be applied to chat messages being sent to Minecraft, if the result is empty the message won't be sent at all +# +DiscordChatChannelGameFilters: {} +DiscordChatChannelDiscordFilters: {".*Online players \\(.*": "", ".*\\*\\*No online players\\*\\*.*": ""} + +# Channel topic updater settings +# +# ChannelTopicUpdaterChannelTopicsAtShutdownEnabled: whether the channel topics should be changed at server shutdown at all +# ChannelTopicUpdaterRateInMinutes: amount of minutes between automatically updating the channel topics with fresh information +# +ChannelTopicUpdaterChannelTopicsAtShutdownEnabled: true +ChannelTopicUpdaterRateInMinutes: 10 + +# Channel Updater +# This feature changes the name of specified channels to comply with in-game placeholders +# Options: +# ChannelId: The ID of the channel to change (required) +# Format: The format for the channel (required). Available placeholders: +# %playercount%: current player count +# %playermax%: maximum player count +# %date%: current date and time +# %totalplayers%: total number of players to ever join the main world +# %uptimemins%: number of minutes since DiscordSRV has started +# %uptimehours%: number of hours since DiscordSRV has started +# %motd%: motd of the server +# %serverversion%: server version such as Spigot-1.9 +# %freememory%: free memory of the JVM in MB +# %usedmemory%: used memory of the JVM in MB +# %totalmemory%: total memory of the JVM in MB +# %maxmemory%: max memory of the JVM in MB +# %freememorygb%: free memory of the JVM in GB +# %usedmemorygb%: used memory of the JVM in GB +# %totalmemorygb%: total memory of the JVM in GB +# %maxmemorygb%: max memory of the JVM in GB +# %tps%: average TPS of the server +# PlaceholderAPI placeholders are also supported +# ShutdownFormat: The format the channel should take when the server has shut down. Available placeholders: +# %time% or %date%: current date and time +# %serverversion%: server version +# %totalplayers%: total number of players to ever join the main world +# %timestamp%: current unix timestamp +# UpdateInterval: Time in minutes to wait between updating the channel's name (minimum is 10 due to rate limits) +ChannelUpdater: + - ChannelId: "0000000000000000" + Format: "%playercount% players online" + ShutdownFormat: "Server is offline" + UpdateInterval: 10 + - ChannelId: "0000000000000000" + Format: "Current TPS: %tps%" + ShutdownFormat: "Server is offline" + UpdateInterval: 10 + +# Discord canned responses +# These are triggers (commands in a way) that will trigger a "canned response" to be sent as a reply to them +# You should probably change these from their defaults or add your own +# +# Syntax is {"TRIGGER": "RESPONSE", "TRIGGER": "RESPONSE", ...} +# If you do not want any canned responses, set this to just {} +# PlaceholderAPI placeholders are supported for the values +# +DiscordCannedResponses: {} + +# Minecraft to Discord account linking +# These are the options pertaining to how linking a Minecraft account to a Discord account functions +# +# MinecraftDiscordAccountLinkedConsoleCommands: commands to run when an account is linked, see below for possible placeholders +# MinecraftDiscordAccountUnlinkedConsoleCommands: commands to run when an account is unlinked, see below for possible placeholders +# %minecraftplayername%: player's Minecraft username +# example: Notch +# %minecraftuuid%: player's uuid +# example: you know what a uuid looks like +# %discordid%: linked discord account's id +# example: 12345678901234567890 +# %discordname%: linked discord account's username +# example: Notch +# +# MinecraftDiscordAccountLinkedRoleNameToAddUserTo: the name or id of a discord role to add a discord user to when they link their account +# MinecraftDiscordAccountLinkedAllowRelinkBySendingANewCode: allows sending a new code to the bot to unlink and relink with the new code +# MinecraftDiscordAccountLinkedUsePM: link accounts using PMs +# MinecraftDiscordAccountLinkedMessageDeleteSeconds: Time (in seconds) before deleting the message when linked in a text channel. Set to 0 if you do not want to delete the message. +# +MinecraftDiscordAccountLinkedConsoleCommands: ["", "", ""] +MinecraftDiscordAccountUnlinkedConsoleCommands: ["", "", ""] +MinecraftDiscordAccountLinkedRoleNameToAddUserTo: "Linked" +MinecraftDiscordAccountLinkedAllowRelinkBySendingANewCode: false +MinecraftDiscordAccountLinkedUsePM: true +MinecraftDiscordAccountLinkedMessageDeleteSeconds: 0 + +# Server watchdog +# +# The watchdog constantly monitors the last time your server performed a game tick +# If the time since the last tick goes above the set interval in seconds, Discord messages can be triggered +# +# ServerWatchdogEnabled: whether the watchdog is enabled at all +# ServerWatchdogTimeout: time in seconds that need to elapse before the watchdog takes action (Spigot's crash detection uses 60 for this) +# the minimum for this value is 10 +# ServerWatchdogMessageCount: the amount of times ServerWatchdogMessage is sent. useful if you *really* want to make sure you know something's up +# +ServerWatchdogEnabled: true +ServerWatchdogTimeout: 30 +ServerWatchdogMessageCount: 3 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9e99fc1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,43 @@ +services: + mc: + image: itzg/minecraft-server + container_name: minecraft + tty: true + stdin_open: true + ports: + - "25565:25565" + - "24454:24454/udp" + entrypoint: sh -c "cp -r /configs/* /data/plugins/ && chown -R minecraft:minecraft /data/plugins/ && /start" + environment: + EULA: "TRUE" + TYPE: "PAPER" + MEMORY: "4g" + MODRINTH_PROJECTS: | + simple-voice-chat + coreprotect:llmrc4cl + discordsrv + discordsrv-commands-extension:xNANgK2O + interactivechat + interactivechat-discordsrv-addon + # selected latest coreprotect version manually because 1.21 doesn't exist yet + SPIGET_RESOURCES: "85811,82342,62325,106031" + SERVER_NAME: "vaporvee's Minecraft-Server" + ICON: "https://i.ytimg.com/vi/vpKc4X1m8Yo/hq720.jpg" + MOTD: "§1Yannik's crazy Minecraft-Server, der §1§ldefinitiv länger§1 als 2 Wochen hält! Jaaaa...." + MAX_PLAYERS: "420" + ENABLE_WHITELIST: "true" + WHITELIST: "f396e2b9-cbb1-46a0-bb72-96898a1ca44d" + DIFFICULTY: "NORMAL" + VIEW_DISTANCE: "128" + SPAWN_PROTECTION: "0" + ENABLE_COMMAND_BLOCK: "true" + REPLACE_ENV_VARIABLES: "TRUE" + ENV_VARIABLE_PREFIX: "CFG_" + CFG_DISCORD_BOT_TOKEN: ${DISCORD_BOT_TOKEN} + CFG_DISCORD_GLOBAL_CHANNEL_ID: ${DISCORD_GLOBAL_CHANNEL_ID} + CFG_DISCORD_CONSOLE_CHANNEL_ID: ${DISCORD_CONSOLE_CHANNEL_ID} + volumes: + - ./data:/data + - ./plugins:/plugins + +# `docker exec -i minecraft rcon-cli` to access the console \ No newline at end of file