Integrations โ
ChatPlugin offers integrations with several plugins and services.
Plugin integrations โ
Module info | |
---|---|
Configuration | settings.anticheat-integration in config.yml [?] |
Manager | IntegrationManager |
Support | 1.8+ |
Free version | โ |
Proxy-configurable | โ |
ChatPlugin offers integrations with the following plugins:
Name | Type | Description | Bukkit | Sponge | BungeeCord | Velocity | Free version |
---|---|---|---|---|---|---|---|
CombatLogX | CombatLogIntegration | Prevents vanished players from hitting others and adds the COMBAT_TAG event-triggered scoreboard. | โ | โ | โ | โ | โ |
DiscordSRV | SocialIntegration | Blocks messages when a player cannot use the chat. | โ | โ | โ | โ | โ |
EssentialsX | EconomyIntegration | Adds the {balance} placeholder, even without a placeholder plugin. | โ | โ | โ | โ | โ |
Floodgate | MultiPlatformIntegration | Detects Bedrock players to adapt certain features. | โ | โ | โ | โ | โ |
GadgetsMenu (both free and premium versions) | CosmeticsIntegration | Removes cosmetics when a player enables vanish. | โ | โ | โ | โ | โ |
Geyser | MultiPlatformIntegration | Detects Bedrock players to adapt certain features. | โ | โ | โ | โ | โ |
LuckPerms | PermissionIntegration | Checks permissions even when players are offline. | โ | โ | โ | โ | โ |
Matrix | AnticheatIntegration | Provides the Violations and the Player violations GUI. | โ | โ | โ | โ | โ |
MVdWPlaceholderAPI | PlaceholderIntegration | Enables other plugins' placeholders and offers 100+ custom placeholders. | โ | โ | โ | โ | โ |
Negativity | AnticheatIntegration | Provides the Violations and the Player violations GUI. | โ | โ | โ | โ | โ |
PlaceholderAPI | PlaceholderIntegration | Enables other plugins' placeholders and offers 100+ custom placeholders. | โ | โ | โ | โ | โ |
PlayerParticles | CosmeticsIntegration | Removes particles when a player enables vanish. | โ | โ | โ | โ | โ |
ProtocolSupport | VersionIntegration | Detects players' versions to send certain version-based messages. | โ | โ | โ | โ | โ |
UltraCosmetics | CosmeticsIntegration | Removes cosmetics when a player enables vanish. | โ | โ | โ | โ | โ |
Vault | EconomyIntegration | Adds the {balance} placeholder, even without a placeholder plugin. | โ | โ | โ | โ | โ |
ViaVersion | VersionIntegration | Detects players' versions to send certain version-based messages. | โ | โ | โ | โ | โ |
Vulcan | AnticheatIntegration | Provides the Violations and the Player violations GUI. | โ | โ | โ | โ | โ |
WorldGuard | RegionIntegration | Adds the REGION_ENTER and the REGION_LEAVE event-triggered scoreboards. | โ | โ | โ | โ | โ |
Economy integrations โ
Placeholders โ
{balance}
: player's balance (ex.: 1.25K)
Anticheats โ
Refer to the table above for more information about available anticheat integrations.
NOTE
To enable the Vulcan integration, you need to set settings.enable-api
to true
in Vulcan's config.yml file.
You can decide which punishments should be considered as automatically generated by the anticheat based on their reason, ignoring case, color and formatting codes. For example, if all your anticheat punishments' reasons start with "[MyCustomAnticheat]", add that string to settings.anticheat-integration.reasons-start-with
in config.yml.
Refer to the Syntax/Timestamps page to find out the timestamp specifiable at settings.anticheat-integration.violations-expiration-timeout
.
Placeholders โ
{cheater}
: cheater's name{cheater_uuid}
: cheater's UUID{anticheat}
: anticheat that flagged the player{cheat_id}
: violation's cheat's ID{cheat_display_name}
: violation's cheat's display name in violations-icons.yml{component}
: violation's component{server}
: violation's origin server{amount}
: amount of times the player got flagged{ping}
: cheater's ping in milliseconds, integer{ping_format}
: formatted ping with color{tps}
: origin server's TPS (ex.: 19.95){version}
: cheater's version (ex.: 1.19.4){version_protocol}
: cheater's version's protocol number, integer (ex.: 762){client_edition}
: cheater's client's edition (Java/Bedrock){last_time}
: last time the violation got flagged
Version integrations โ
Placeholders โ
{version}
: player's version (ex.: 1.19.4){version_protocol}
: player's version's protocol, integer (ex. 762)
Discord integration โ
Module info | |
---|---|
Configuration | discord-integration.yml |
Manager | DiscordIntegrationManager |
Support | 1.8+ |
Free version | โ |
Proxy-configurable | โ |
ChatPlugin includes a Discord integration module based on JDA that enables the Minecraft server to be synchronized with a Discord guild.
NOTE
If you are using multi instance mode (ChatPlugin installed on the proxy) configure the module only on the proxy.
Here are the main and most interesting features:
- punishment messages (like warnings and mutes) are sent in real time to the specified text channel
- a notification is sent to Staff members whenever a player uses multiple accounts or evades a ban
- some useful commands (see the table below)
- support for beautiful embed messages (with images, too)
- every message is translatable and customizable
Default configuration (discord-integration.yml
in 1.8+)
settings:
enabled: false
guild-id: 0
application-id: 0
token: ''
channels-ids:
punishments: 0
staff-notifications: 0
status:
value: with {online_minecraft} other players.
activity-type: PLAYING
update-timeout-ms: 10000
messages:
main:
help:
title:
text: Help for ChatPlugin
description: Click [here](https://remigio07.me/chatplugin/wiki/modules/Integrations#commands) to visit the wiki with the commands list.
thumbnail: https://live.staticflickr.com/65535/53596116157_d426b5c1c8_o_d.png
color: 55FF55
info:
title:
text: Info and contacts for ChatPlugin
description: |-
**Website:** https://remigio07.me/chatplugin
**GitHub:** https://github.com/ChatPlugin/ChatPlugin
**Discord:** https://discord.gg/eSnAPhvMTG
thumbnail: https://live.staticflickr.com/65535/53597447830_f9933947a8_o_d.png
color: 55FF55
reload-start:
title:
text: Reload started
description: ChatPlugin's Discord bot is reloading...
thumbnail: https://live.staticflickr.com/65535/53596116162_6f5a68c410_o_d.png
color: 55FF55
reload-end:
title:
text: Reloaded successfully
description: The bot has been reloaded. Took **{last_reload_time} ms** to complete.
thumbnail: https://live.staticflickr.com/65535/53597447840_45bcbe8901_o_d.png
color: 55FF55
status:
title:
text: Current server status
description: |-
**OS:** {os_name} {os_version}, **Java:** {java_version}
**Environment:** {environment} {environment_version}
**ChatPlugin:** {chatplugin_version}, **JDA:** {jda_version}
**Uptime:** {uptime}
**Used memory:** {used_memory}/{max_memory} MB
**Allocated:** {total_memory} MB, **free:** {free_memory} MB
**Current threads count:** {active_threads}x
**Used storage:** {used_storage}/{total_storage} GB
**Free storage:** {free_storage} GB
**Enabled players:** {enabled_players}x
**Startup:** {startup_time} ms, **last reload:** {last_reload_time} ms
thumbnail: https://live.staticflickr.com/65535/53597756194_8f7c5a2213_o_d.png
color: 55FF55
version:
title:
text: Current plugin version
description: |-
**ChatPlugin version:** {chatplugin_version}
**JDA version:** {jda_version}
thumbnail: https://live.staticflickr.com/65535/53596550622_bf7816d18e_o_d.png
color: 55FF55
ban:
info:
title:
text: 'Ban **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Who unbanned:** {who_unbanned}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Remaining time:** {remaining_time}
**Unban date:** {unban_date}
**Type:** {type}
**Active:** {active}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: AA0000
list:
title:
text: Banlist
description: '**Active bans'' IDs:** {bans}.'
thumbnail: https://live.staticflickr.com/65535/53597885450_768654f4cb_o_d.png
color: AA0000
empty-list:
title:
text: Empty list
description: There are no active bans.
thumbnail: https://live.staticflickr.com/65535/53596550572_decef9c6d2_o_d.png
color: 55FF55
banned:
enabled: true
title:
text: 'Ban **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Type:** {type}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: AA0000
updated:
enabled: true
title:
text: 'Ban **#{id}** updated: {player}'
description: |-
**Staff member:** {staff_member}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Type:** {type}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: AA0000
unbanned:
enabled: true
title:
text: 'Unban **#{id}**: {player}'
description: |-
**Staff member:** {who_unbanned}
**Date:** {date}
thumbnail: https://mc-heads.net/avatar/{player}
color: 55FF55
expired:
enabled: true
title:
text: 'Ban **#{id}** expired: {player}'
description: '**Date:** {date}'
thumbnail: https://mc-heads.net/avatar/{player}
color: 55FF55
unspecified-reason: Reason not specified.
formats:
types:
account: username/UUID
ip: IP address
active:
'yes': active
'no': disactive
global:
'yes': global
'no': local
silent:
'yes': 'yes'
'no': 'no'
warning:
info:
title:
text: 'Warning **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Who unwarned:** {who_unwarned}
**Last reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Remaining time:** {remaining_time}
**Unwarn date:** {unwarn_date}
**Warnings:** {amount}/{max_warnings}
**Active:** {active}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: FF5555
list:
title:
text: Warnlist
description: '**Active warnings'' IDs:** {warnings}.'
thumbnail: https://live.staticflickr.com/65535/53597428861_2f63295099_o_d.png
color: FF5555
empty-list:
title:
text: Empty list
description: There are no active warnings.
thumbnail: https://live.staticflickr.com/65535/53596550572_decef9c6d2_o_d.png
color: 55FF55
warned:
enabled: true
title:
text: 'Warning **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Last reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Warnings:** {amount}/{max_warnings}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: FF5555
removed:
enabled: true
title:
text: 'Warning **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Date:** {date}
thumbnail: https://mc-heads.net/avatar/{player}
color: AA0000
cleared:
enabled: true
title:
text: Cleared **{player}**'s warnings
description: |-
**Staff member:** {staff_member}
**Date:** {date}
thumbnail: https://mc-heads.net/avatar/{player}
color: AA0000
expired:
enabled: true
title:
text: 'Warning **#{id}** expired: {player}'
description: '**Date:** {date}'
thumbnail: https://mc-heads.net/avatar/{player}
color: AA0000
unspecified-reason: Reason not specified.
formats:
active:
'yes': active
'no': disactive
global:
'yes': global
'no': local
silent:
'yes': 'yes'
'no': 'no'
kick:
info:
title:
text: 'Kick **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Type:** {type}
thumbnail: https://mc-heads.net/avatar/{player}
color: FFAA00
kicked:
enabled: true
title:
text: 'Kick **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
thumbnail: https://mc-heads.net/avatar/{player}
color: FFAA00
unspecified-reason: Reason not specified.
formats:
silent:
'yes': 'yes'
'no': 'no'
mute:
info:
title:
text: 'Mute **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Who unmuted:** {who_unmuted}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Remaining time:** {remaining_time}
**Unmute date:** {unmute_date}
**Active:** {active}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: FFFF55
list:
title:
text: Mutelist
description: '**Active mutes'' IDs:** {mutes}.'
thumbnail: https://live.staticflickr.com/65535/53597428856_5bf1c0f710_o_d.png
color: FFFF55
empty-list:
title:
text: Empty list
description: There are no active mutes.
thumbnail: https://live.staticflickr.com/65535/53596550572_decef9c6d2_o_d.png
color: 55FF55
muted:
enabled: true
title:
text: 'Mute **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: FFFF55
updated:
enabled: true
title:
text: 'Mute **#{id}** updated: {player}'
description: |-
**Staff member:** {staff_member}
**Reason:** {reason}
**Server:** {server}
**Date:** {date}
**Duration:** {duration}
**Scope:** {global}
thumbnail: https://mc-heads.net/avatar/{player}
color: FFFF55
unmuted:
enabled: true
title:
text: 'Unmute **#{id}**: {player}'
description: |-
**Staff member:** {staff_member}
**Date:** {date}
thumbnail: https://mc-heads.net/avatar/{player}
color: 55FF55
expired:
enabled: true
title:
text: 'Mute **#{id}** expired: {player}'
description: '**Date:** {date}'
thumbnail: https://mc-heads.net/avatar/{player}
color: 55FF55
unspecified-reason: Reason not specified.
formats:
active:
'yes': active
'no': disactive
global:
'yes': global
'no': local
silent:
'yes': 'yes'
'no': 'no'
inexistent-id:
title:
text: Inexistent ID
description: The specified ID does not exist. Try with a different one.
thumbnail: https://live.staticflickr.com/65535/53597756249_c3908ff7a7_o_d.png
color: FF5555
no-permission:
title:
text: No permission
description: You do not have the permission to execute this command.
thumbnail: https://live.staticflickr.com/65535/53597756249_c3908ff7a7_o_d.png
color: FF5555
guild-only-action:
title:
text: Guild only action
description: This action can only be performed inside of the configured guild.
thumbnail: https://live.staticflickr.com/65535/53597756249_c3908ff7a7_o_d.png
color: FF5555
disabled-feature:
title:
text: Disabled feature
description: That feature is disabled. Set it up in the server's config files.
thumbnail: https://live.staticflickr.com/65535/53597756249_c3908ff7a7_o_d.png
color: FF5555
invalid-ip-address:
title:
text: Invalid IP address
description: The specified IP address is invalid. Try with a different one.
thumbnail: https://live.staticflickr.com/65535/53597756249_c3908ff7a7_o_d.png
color: FF5555
at-least-one-online:
title:
text: No players online
description: At least one player online is required to perform this action.
thumbnail: https://live.staticflickr.com/65535/53597756249_c3908ff7a7_o_d.png
color: FF5555
ip-lookup:
title:
text: IP lookup of {ip_address}
url: https://www.maxmind.com/en/geoip2-precision-demo
description: |-
**ISP:** {isp}
**Country:** {country}, {continent}
**Subdivision(s):** {subdivisions}
**City:** {city} (postal code: {postal_code})
**Coords:** {latitude}ยฐ {longitude}ยฐ
**Accuracy radius:** ~{accuracy_radius_km} km
thumbnail: https://live.staticflickr.com/65535/53597756269_8e08b3dfb1_o_d.png
color: 5555FF
timestamps:
now: now
ever: ever
never: never
second: ' second'
seconds: ' seconds'
minute: ' minute'
minutes: ' minutes'
hour: ' hour'
hours: ' hours'
day: ' day'
days: ' days'
month: ' month'
months: ' months'
year: ' year'
years: ' years'
placeholders:
nobody: nobody
not-present: not present
commands:
chatplugin:
description: ChatPlugin's main command.
args-descriptions:
sub-command: Sub-command for the main command
baninfo:
description: Show information about a ban.
args-descriptions:
id: The ban's ID
warninginfo:
description: Show information about a warning.
args-descriptions:
id: The warning's ID
kickinfo:
description: Show information about a kick.
args-descriptions:
id: The kick's ID
muteinfo:
description: Show information about a mute.
args-descriptions:
id: The mute's ID
banlist:
description: Show the active bans list.
warnlist:
description: Show the active warnings list.
mutelist:
description: Show the active mutes list.
iplookup:
description: Perform an IP address lookup.
args-descriptions:
ip-address: The IP address to check
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
Setup โ
Follow these steps to properly configure this module:
- go to Discord Developer Portal and login with your account
- click on "New application" and choose a name, agree to their EULA, then click "Create"
- copy the application ID into discord-integration.yml at
settings.application-id
- click on "โ๏ธ Installation" in the sidebar and select "None" under "Install Link", then save changes
- click on "๐ค Bot" in the sidebar, click "Reset Token", then "Copy" it to
settings.token
- disable the "Public bot" option under "Authorization Flow" and save changes
- click on "๐ง OAuth2" in the sidebar, select "bot" under "OAuth2 URL Generator"
- "Copy" the link at the bottom of the page and open it with your browser
- invite the bot to a guild where you have the "Manage server" permission
- open Discord and enable Developer Mode (User Settings โ Advanced โ Developer Mode)
- right click your guild's logo, select "Copy Server ID" and paste it to
settings.guild-id
- (optional) choose a channel for punishment messages and "Copy Channel ID" to
settings.channels-ids.punishments
- (optional) choose a channel for Staff notifications and "Copy Channel ID" to
settings.channels-ids.staff-notifications
- save the file and perform a
/chatplugin reload
- check if everything works by executing a slash command (see table below)
The following snippet of code represents and explains the Discord integration's configuration.
settings:
enabled: false # whether to enable or disable this module
guild-id: 0 # guild's ID
application-id: 0 # application's ID
token: '' # bot's secret token
channels-ids:
punishments: 0 # where punishment messages will be sent
staff-notifications: 0 # where Staff notifications will be sent
status:
value: with {online_minecraft} other players. # bot's status
activity-type: PLAYING # read below
update-timeout-ms: 10000 # bot's status' update timeout, in milliseconds
# ...Discord integration's messages...
2
3
4
5
6
7
8
9
10
11
12
13
NOTE
This module is disabled by default.
Placeholders โ
The following placeholders may be used at status.value
:
{chatplugin_version}
{jda_version}
{online_minecraft}
{discord_users}
{enabled_players}
{enabled_managers}
{max_players}
{date}
{startup_time}
{last_reload_time}
{java_version}
{environment}
{environment_version}
{uptime}
{max_memory}
{total_memory}
{used_memory}
{free_memory}
{total_storage}
{used_storage}
{free_storage}
{os_name}
{os_arch}
{os_version}
{active_threads}
NOTE
These placeholders will soon be standardized and will follow the server placeholders format.
Activity types โ
The plugin supports 6 activity types specifiable at status.activity-type
:
COMPETING
- displays as "Competing in..."CUSTOM_STATUS
- displays as a custom statusLISTENING
- displays as "Listening..."PLAYING
- displays as "Playing..."STREAMING
- displays as "Streaming..."WATCHING
- displays as "Watching..."
WARNING
Running this module is not very resource demanding as this bot is pretty lightweight, but it will use some memory (about an extra ~50 MB), so make sure your server can handle it. Some proxy setups run on greedy memory allocations (128, 256 MB) and in these cases increasing the available RAM is recommended.
Commands โ
Here is the list of all available slash commands for the Discord bot. More will be added over time.
Command | Recommended rank | Description |
---|---|---|
/chatplugin | user | Main command. |
/chatplugin help | user | Display the help menu. |
/chatplugin reload | admin | Reload the Discord integration. |
/chatplugin status | mod | Display the server/proxy's current status. |
/chatplugin version | user | Display info about ChatPlugin's and JDA's version. |
/chatplugin info | user | Display info about the plugin. |
/banlist | mod | Show the active bans' list. |
/warnlist | mod | Show the active warnings' list. |
/mutelist | mod | Show the active mutes' list. |
/baninfo <ID> | mod | Check a ban by its ID. |
/warninginfo <ID> | mod | Check a warning by its ID. |
/kickinfo <ID> | mod | Check a kick by its ID. |
/muteinfo <ID> | mod | Check a mute by its ID. |
/iplookup <IP address> | mod | Perform a lookup of an IP address. |
NOTE
For now, all commands require the administration permission to be executed. This will be changed in the future.
Messages โ
Every message sent by the bot can be customized through the discord-integration.yml file. Unlike the Minecraft plugin, the bot supports only one language: it's impossible to send different messages to two users in the same text channel on Discord. Every punishment message can be disabled (for example if you want ban messages to be sent but you don't want ban expiration messages).
Discord uses a Markdown-similar syntax for text messages; you can easily find a guide about how to create bold, italic and formatted messages.
Customizing embeds โ
Every message in the discord-integration.yml file has default values which can be customized. Here's the first one (/chatplugin help
):
# ...Discord integration's settings...
messages:
main:
help:
title:
text: Help for ChatPlugin
description: Click [here](https://remigio07.me/chatplugin/wiki/modules/Integrations#commands) to visit the wiki with the commands list.
thumbnail: https://live.staticflickr.com/65535/53596116157_d426b5c1c8_o_d.png
color: 55FF55
# ...other messages...
13
14
15
16
17
18
19
20
21
...but you can add more properties to every message, here's the complete list:
title.text
: the text the embed's title will displaytitle.url
: turn the title into an hyperlink pointed to a URLdescription
: the actual embed's contentimage
: the image's URL for the messagethumbnail
: the thumbnail image's URL for the messageauthor.text
: displayed text about an authorauthor.url
: turn the text into an hyperlink pointed to a URLauthor.icon-url
: the displayed icon's URL for the authorfooter.text
: displayed text in the message's footerfooter.icon-url
: the displayed icon's URL for the footercolor
: message's side's color in hex format without#
/discordmessage
command โ
The /discordmessage
command allows you to send messages from the Minecraft server to the Discord guild.
Its messages are configurable at commands.discordmessage
in the messages' files.
Refer to the Getting started/Commands/Misc page for more info.
Telegram integration โ
Module info | |
---|---|
Configuration | telegram-integration.yml |
Manager | TelegramIntegrationManager |
Support | 1.8+ |
Free version | โ |
Proxy-configurable | โ |
ChatPlugin includes a Telegram integration module based on Java Telegram Bot API that enables the Minecraft server to be synchronized with a Telegram chat.
NOTE
If you are using multi instance mode (ChatPlugin installed on the proxy) configure the module only on the proxy.
Here are the main and most interesting features:
- punishment messages (like warnings and mutes) are sent in real time to the chat
- a notification is sent to Staff members whenever a player uses multiple accounts or evades a ban
- some useful commands (see the table below)
- every message is translatable and customizable
Default configuration (telegram-integration.yml
in 1.8+)
settings:
enabled: false
chat-id: 0
username: ''
token: ''
status:
value: Playing with {online_minecraft} other players.
update-timeout-ms: 30000
messages:
main:
help: |-
โ Help for ChatPlugin
Click <a href="https://remigio07.me/chatplugin/wiki/modules/Integrations#commands-1">here</a> to visit the wiki with the commands list.
info: |-
โน Info and contacts for ChatPlugin
<strong>Website:</strong> https://remigio07.me/chatplugin
<strong>GitHub:</strong> https://github.com/ChatPlugin/ChatPlugin
<strong>Discord:</strong> https://discord.gg/eSnAPhvMTG
status: |-
โน Current server status
<strong>OS:</strong> {os_name} {os_version}, <strong>Java:</strong> {java_version}
<strong>Environment:</strong> {environment} {environment_version}
<strong>ChatPlugin:</strong> {chatplugin_version}, <strong>Java Telegram Bot API version:</strong> {java_telegram_bot_api_version}
<strong>Uptime:</strong> {uptime}
<strong>Used memory:</strong> {used_memory}/{max_memory} MB
<strong>Allocated:</strong> {total_memory} MB, <strong>free:</strong> {free_memory} MB
<strong>Current threads count:</strong> {active_threads}x
<strong>Used storage:</strong> {used_storage}/{total_storage} GB
<strong>Free storage:</strong> {free_storage} GB
<strong>Enabled players:</strong> {enabled_players}x
<strong>Startup:</strong> {startup_time} ms, <strong>last reload:</strong> {last_reload_time} ms
version: |-
โ Current plugin version
<strong>ChatPlugin version:</strong> {chatplugin_version}
<strong>Java Telegram Bot API version:</strong> {java_telegram_bot_api_version}
ban:
info: |-
โ Ban <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Who unbanned:</strong> {who_unbanned}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Remaining time:</strong> {remaining_time}
<strong>Unban date:</strong> {unban_date}
<strong>Type:</strong> {type}
<strong>Active:</strong> {active}
<strong>Scope:</strong> {global}
list: |-
โ Banlist
<strong>Active bans' IDs:</strong> {bans}.
empty-list: |-
โ
Empty list
There are no active bans.
banned:
enabled: true
value: |-
โ Ban <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Type:</strong> {type}
<strong>Scope:</strong> {global}
updated:
enabled: true
value: |-
โ Ban <strong>#{id}</strong> updated: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Type:</strong> {type}
<strong>Scope:</strong> {global}
unbanned:
enabled: true
value: |-
โ Unban <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {who_unbanned}
<strong>Date:</strong> {date}
expired:
enabled: true
value: |-
โ Ban <strong>#{id}</strong> expired: {player}
<strong>Date:</strong> {date}
unspecified-reason: Reason not specified.
formats:
types:
account: username/UUID
ip: IP address
active:
'yes': active
'no': disactive
global:
'yes': global
'no': local
silent:
'yes': 'yes'
'no': 'no'
warning:
info: |-
โ Warning <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Who unwarned:</strong> {who_unwarned}
<strong>Last reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Remaining time:</strong> {remaining_time}
<strong>Unwarn date:</strong> {unwarn_date}
<strong>Warnings:</strong> {warnings_amount}/{max_warnings}
<strong>Active:</strong> {active}
<strong>Scope:</strong> {global}
list: |-
โ Warnlist
<strong>Active warnings' IDs:</strong> {warnings}.
empty-list: |-
โ
Empty list
There are no active warnings.
warned:
enabled: true
value: |-
โ Warning <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Last reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Warnings:</strong> {warnings_amount}/{max_warnings}
<strong>Scope:</strong> {global}
removed:
enabled: true
value: |-
โ Warning <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Date:</strong> {date}
cleared:
enabled: true
value: |-
โ Cleared <strong>{player}</strong>'s warnings
<strong>Staff member:</strong> {staff_member}
<strong>Date:</strong> {date}
expired:
enabled: true
value: |-
โ Warning <strong>#{id}</strong> expired: {player}
<strong>Date:</strong> {date}
unspecified-reason: Reason not specified.
formats:
active:
'yes': active
'no': disactive
global:
'yes': global
'no': local
silent:
'yes': 'yes'
'no': 'no'
kick:
info: |-
โก Kick <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Type:</strong> {type}
kicked:
enabled: true
value: |-
โก Kick <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
unspecified-reason: Reason not specified.
formats:
silent:
'yes': 'yes'
'no': 'no'
mute:
info: |-
โ Mute <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Who unmuted:</strong> {who_unmuted}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Remaining time:</strong> {remaining_time}
<strong>Unmute date:</strong> {unmute_date}
<strong>Active:</strong> {active}
<strong>Scope:</strong> {global}
list: |-
โ Mutelist
<strong>Active mutes' IDs:</strong> {mutes}.
empty-list: |-
โ
Empty list
There are no active mutes.
muted:
enabled: true
value: |-
โ Mute <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Scope:</strong> {global}
updated:
enabled: true
value: |-
โ Mute <strong>#{id}</strong> updated: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Reason:</strong> {reason}
<strong>Server:</strong> {server}
<strong>Date:</strong> {date}
<strong>Duration:</strong> {duration}
<strong>Scope:</strong> {global}
unmuted:
enabled: true
value: |-
โ Unmute <strong>#{id}</strong>: {player}
<strong>Staff member:</strong> {staff_member}
<strong>Date:</strong> {date}
expired:
enabled: true
value: |-
โ Mute <strong>#{id}</strong> expired: {player}
<strong>Date:</strong> {date}
unspecified-reason: Reason not specified.
formats:
active:
'yes': active
'no': disactive
global:
'yes': global
'no': local
silent:
'yes': 'yes'
'no': 'no'
inexistent-id: |-
โ Inexistent ID
The specified ID does not exist. Try with a different one.
no-permission: |-
โ No permission
You do not have the permission to execute this command.
invalid-number: |-
โ Invalid number
The specified number is invalid. Try with a different one.
group-only-action: |-
โ Group only action
This action can only be performed inside of the configured group.
wrong-syntax: |-
โ Wrong syntax
The syntax is wrong. Usage: <strong>{usage}</strong>.
disabled-feature: |-
โ Disabled feature
That feature is disabled. Set it up in the server's config files.
invalid-ip-address: |-
โ Invalid IP address
The specified IP address is invalid. Try with a different one.
at-least-one-online: |-
โ No players online
At least one player online is required to perform this action.
ip-lookup: |-
โ IP lookup of <strong>{ip_address}</strong>
<strong>ISP:</strong> {isp}
<strong>Country:</strong> {country}, {continent}
<strong>Subdivision(s):</strong> {subdivisions}
<strong>City:</strong> {city} (postal code: {postal_code})
<strong>Coords:</strong> {latitude}ยฐ {longitude}ยฐ
<strong>Accuracy radius:</strong> ~{accuracy_radius_km} km
simple-date-format: E, MM/dd/yyyy hh:mm a
timestamps:
now: now
ever: ever
never: never
second: ' second'
seconds: ' seconds'
minute: ' minute'
minutes: ' minutes'
hour: ' hour'
hours: ' hours'
day: ' day'
days: ' days'
month: ' month'
months: ' months'
year: ' year'
years: ' years'
placeholders:
nobody: nobody
not-present: not present
commands-descriptions:
chatplugin: ChatPlugin's main command.
baninfo: Show information about a ban.
warninginfo: Show information about a warning.
kickinfo: Show information about a kick.
muteinfo: Show information about a mute.
banlist: Show the active bans list.
warnlist: Show the active warnings list.
mutelist: Show the active mutes list.
iplookup: Perform an IP address lookup.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
Setup โ
Follow these steps to properly configure this module:
- contact @BotFather and issue the
/newbot
command - choose a name and a username for your bot by replying to the instructions
- copy the username and the token into telegram-integration.yml at
settings.username
andsettings.token
- add @myidbot to your desired chat and execute
/getgroupid
- copy the chat ID to
settings.chat-id
- save the file and perform a
/chatplugin reload
- check if everything works by executing a command (see table below)
The following snippet of code represents and explains the Telegram integration's configuration.
settings:
enabled: false # whether to enable or disable this module
chat-id: 0 # chat's ID
username: '' # bot's username
token: '' # bot's secret token
status:
value: Playing with {online_minecraft} other players. # bot's status
update-timeout-ms: 30000 # bot's status' update timeout, in milliseconds
# ...Telegram integration's messages...
2
3
4
5
6
7
8
9
NOTE
This module is disabled by default.
Placeholders โ
The following placeholders may be used at status.value
:
{chatplugin_version}
{java_telegram_bot_api_version}
{online_minecraft}
{telegram_users}
{enabled_players}
{enabled_managers}
{max_players}
{date}
{startup_time}
{last_reload_time}
{java_version}
{environment}
{environment_version}
{uptime}
{max_memory}
{total_memory}
{used_memory}
{free_memory}
{total_storage}
{used_storage}
{free_storage}
{os_name}
{os_arch}
{os_version}
{active_threads}
NOTE
These placeholders will soon be standardized and will follow the server placeholders format.
WARNING
Running this module is not very resource demanding as this bot is pretty lightweight, but it will use some memory (about an extra ~50 MB), so make sure your server can handle it. Some proxy setups run on greedy memory allocations (128, 256 MB) and in these cases increasing the available RAM is recommended.
Commands โ
Here is the list of all available commands for the Telegram bot. More will be added over time.
Command | Recommended rank | Description |
---|---|---|
/chatplugin | user | Main command. |
/chatplugin help | user | Display the help menu. |
/chatplugin reload | admin | Reload the Telegram integration. |
/chatplugin status | mod | Display the server/proxy's current status. |
/chatplugin version | user | Display info about ChatPlugin's and Java Telegram Bot API's version. |
/chatplugin info | user | Display info about the plugin. |
/banlist | mod | Show the active bans' list. |
/warnlist | mod | Show the active warnings' list. |
/mutelist | mod | Show the active mutes' list. |
/baninfo <ID> | mod | Check a ban by its ID. |
/warninginfo <ID> | mod | Check a warning by its ID. |
/kickinfo <ID> | mod | Check a kick by its ID. |
/muteinfo <ID> | mod | Check a mute by its ID. |
/iplookup <IP address> | mod | Perform a lookup of an IP address. |
NOTE
For now, all commands require the administration permission to be executed. This will be changed in the future.
Messages โ
Every message sent by the bot can be customized through the telegram-integration.yml file. Unlike the Minecraft plugin, the bot supports only one language: it's impossible to send different messages to two users in the same chat on Telegram. Every punishment message can be disabled (for example if you want ban messages to be sent but you don't want ban expiration messages).
This bot uses a HTML-similar syntax for text messages; you can easily find a guide about how to create bold, italic and formatted messages. Markdown v1 and v2 support will be added in the future.
/telegrammessage
command โ
The /telegrammessage
command allows you to send messages from the Minecraft server to the Telegram chat.
Its messages are configurable at commands.telegrammessage
in the messages' files.
Refer to the Getting started/Commands/Misc page for more info.
ChatPlugin โ A feature-rich and modular chat ecosystem, lightweight and efficient by design.
This wiki is currently updated to version 1.10.4.
ยฉ 2025โโRemigio07
Please report any mistakes and misspellings as described at Home/Reporting issues.