brikster / chatty Goto Github PK
View Code? Open in Web Editor NEWBukkit-compatible chat management system
License: MIT License
Bukkit-compatible chat management system
License: MIT License
Как и следует из названия, это обычный chat-spy, только для команд (выполняемых игроком, соответственно).
Не знаю, есть ли в этом какой-то смысл, поскольку EssentialsX предоставляет данную опцию, но всё же напишу.
Как и следует из описания, это MOTD - сообщение для игрока при подключении к серверу. Может состоять из нескольких строк, поддерживает плейсхолдеры.
На данный момент плагин умеет изменять рядовые сообщение входа и выхода игрока. Было бы также неплохо научить его изменять сообщение для первого входа игрока, т.е. новичка.
Add a function for selecting channels for moderation
Config example:
swear:
.......
scope: [global, donate] # local chat will not be moderated
Примитивная опция, проигрывающая указанный звук при выводе в чат/другие_места сообщение от аннонсера. Было бы неплохо сделать возможность выбора звука для каждой группы сообщений.
Hex color code not support in chat on SSSpigot
После обновления вот до этой версии (до этого юзал релиз)...
https://github.com/Brikster/Chatty/actions/runs/206948291
...перестали работать все существующие чаты. Вернее, игроки могут их видеть, могут писать (если я выдаю право chatty.*
), но им в ответ постоянно шлёт "Вас никто не услышал". Соответственно, становится довольно неприятно. Моя конфигурация каналов чата:
chats:
local:
display-name: 'Локальный'
enable: true
format: '&2&l[&a&lL&2&l]&r %prisonranksx_currentrank_displayname% %deluxetags_tag%%luckperms_prefix%{player}: {message}'
range: 100
cooldown: -1
permission: true
command: 'localchat'
global:
display-name: 'Глобальный'
enable: true
format: '&6&l[&e&lG&6&l]&r %prisonranksx_currentrank_displayname% %deluxetags_tag%%luckperms_prefix%{player}: {message}'
range: -2
symbol: '!'
cooldown: 1
permission: true
command: 'globalchat'
world:
enable: true
display-name: 'Мировой'
format: '&3&l[&b&lW&3&l]&r %prisonranksx_currentrank_displayname% %deluxetags_tag%%luckperms_prefix%{player}: {message}'
range: -1
symbol: '~'
cooldown: -1
permission: true
command: 'worldchat'
trade:
display-name: 'Торговый'
enable: true
format: |
&7*&m--------------------&6&l[&e&lТорговля&6&l]&7&m--------------------&7*
&e&lАвтор: &r%prisonranksx_currentrank_displayname% %deluxetags_tag%%luckperms_prefix%{player}
&e&lОбъявление: &r{message}
&7*&m---------------------------------------------------&7*
range: -2
symbol: '$'
money: 1
cooldown: 300
permission: true
command: 'tradechat'
staff:
display-name: 'Админский'
enable: true
format: '&4&l[&c&lA&4&l]&r %prisonranksx_currentrank_displayname% %deluxetags_tag%%luckperms_prefix%{player}: {message}'
range: -1
symbol: '#'
cooldown: -1
permission: true
command: 'staffchat'
aliases: ['sc']
Классика, забытая года 2 назад. Обычное JSON форматирование для сообщений аннонсера: ховер-текст, выполнение действия после клика.
При упоминании пользователя посредством символ @ и клике по части с этим упоминанием фрагмент конфига suggest: '@{player} '
работает некорректно - он указывает на ник игрока, который кликает по упоминанию, а не ник игрока, который это упоминание использовал.
Плагин (2.19-SHAPSHOT) - не работает и кидает ошибки в консоль на каждый ивент (билжу как написано в гайде здесь)
Вероятно, это самое глобальное предложение от меня за последнее время. В конкурирующем плагине (ChatManager от H1DD3NxN1NJA) есть такая фишка, как чат-бот - примитивная система, детектящая заранее заданные в конфиге фразы в чате и отвечающая на них пользователям в чате. Фишка нереально крутая и имеет массу применений, однако, в самом ChatManager`е она имеет массу недоработок. Потому предлагаю её сюда в следующем виде, который, как по мне, будет более универсальным и адаптированным непосредственно под Chatty. Пример конфигурации:
prefix: '&6[&eЧат-бот&6]&e: &r' //Префикс бота, вставляемый перед каждым его ответом
cooldown: 5 //Время в секундах, которое бот будет игнорировать вопросы одного и того же игрока после его последнего ответа (Для избежания спама)
global_cooldown: false //Дополнение для cooldown. Значение true означает, что таймер времени перезарядки будет общим для всех игроков, а не для каждого отдельно
triggers: //Перечень ивентов, которые обрабатываются ботом
join:
//См. пример в death
quit:
//См. пример в death
death:
permission: 'chatty.bot.example.death' //Право, которое должно быть у игрока, чтобы бот среагировал на ивент
answer: | //Ответ бота с поддержкой разделения на несколько строк. При желании можно прикрутить JSON и PAPI
'Объясните уже кто-нибудь {player}, что вовсе не обязательно обнимать каждый встречный кактус!'
channel: 'global' //Название канала, в который будет отправляться ответ бота. Для локальных чатов центральной точкой берется позиция игрока, которому дается ответ. Префикс канала чата при этом, естественно, не отображать
commands: //Список команд, выполняемых при ответе пользователю
- '[console] say Meow' //Доступные варианты - [console] (для выполнения из консоли), [player] (для выполнения от имени игрока)
questions:
'question_1': //Название вопроса
permission: 'chatty.bot.example' //Право, которое должно быть у игрока, чтобы бот среагировал на сообщение
message: //Перечень слов, которые должны находиться в сообщении игрока. Поддерживает регулярные выражения, т.е. в данном случае бот должен среагировать как на "КАК создать ПРИВАТ", так и на "КАК заПРИВАТить территорию?"
- 'как'
- 'приват'
count: 2 //Дополнение для triggers, обозначающее минимальное количество слов из списка, которое должно быть в сообщении игрока для ответа бота
answer: | //Ответ бота с поддержкой разделения на несколько строк. При желании можно прикрутить JSON и PAPI
'{player}, не знаешь как заприватить территорию? - Воспользуйся этим руководством:'
'google.com'
channel: 'global' //Название канала, в который будет отправляться ответ бота. Для локальных чатов центральной точкой берется позиция игрока, которому дается ответ. Префикс канала чата при этом, естественно, не отображать
commands: //Список команд, выполняемых при ответе пользователю
- '[console] eco take {player} 100' //Доступные варианты - [console] (для выполнения из консоли), [player] (для выполнения от имени игрока)
Вроде как всё учёл. Жду ответа :D
Версия плагина - 2.19 (DEV)
Создан простой чат:
test:
enable: true
format: '&8(&4TEST&8) &c{player}{suffix} &7>> &c{message}'
range: -2
symbol: ']'
cooldown: 5
permission: true
А так же к нему создан replacements:
'test': original: '&8(&4TEST&8)' text: '&8(&4TEST&8)' tooltip: - 'Тестовый чат, ага да.'
Проблема обнаружена в том - если данного replacements нету, то цветовой код работает адекватно - то есть &8(&4TEST&8) - слово TEST является красным, а скобки серые.
Но при добавление replacements - цветовые коды вообще не работает на данный чат - то есть они просто белые.
Добавить возможность отображать тайтлы пользователю, который был упомянут в чате. Всего 3 доступных строки:
1. title
2. subtitle
3. actionbar
Возможность применять цветовые коды и, в идеале, плейсхолдеры.
Использовал вот этот билд: https://github.com/Brikster/Chatty/actions/runs/192338972
Результат при отправке сообщения с включенным JSON: https://pastebin.com/k23HXp9c
Сервер: Mohist-1.12.2-a586242-server
Тестеры нужны?
Java CI #22: Commit 1b71770
Hello!
Placeholders don't work on 1.16: {player}, {sender-name}, {recipient-name}
Server: Paper, 1.16.1
На данный момент при переключении между чатами выводится сообщение Вы перешли в чат "local/global/etc"
. Было бы неплохо создать для каждого канала возможность задать название на русском языке, дабы не использовать оригинальное наименование объекта.
Плагин DiscordSRV при отправке сообщения пишет: (это при отправке сообщения в дискорде.)
[15:38:12 ERROR]: [DiscordSRV] Unable to get Chatty plugin
[15:38:12 WARN]: java.lang.NoSuchMethodException: ru.mrbrikster.chatty.Chatty.api()
[15:38:12 WARN]: at java.lang.Class.getMethod(Unknown Source)
[15:38:12 WARN]: at github.scarsz.discordsrv.hooks.chat.ChattyChatHook.getApi(ChattyChatHook.java:72)
[15:38:12 WARN]: at github.scarsz.discordsrv.hooks.chat.ChattyChatHook.broadcastMessageToChannel(ChattyChatHook.java:46)
[15:38:12 WARN]: at github.scarsz.discordsrv.DiscordSRV.broadcastMessageToMinecraftServer(DiscordSRV.java:1356)
[15:38:12 WARN]: at github.scarsz.discordsrv.listeners.DiscordChatListener.onGuildMessageReceived(DiscordChatListener.java:245)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:398)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.hooks.EventManagerProxy.handleInternally(EventManagerProxy.java:82)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:69)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.JDAImpl.handleEvent(JDAImpl.java:150)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:97)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:948)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:835)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:813)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:986)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.ReadingThread.main(ReadingThread.java:108)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.ReadingThread.runMain(ReadingThread.java:64)
[15:38:12 WARN]: at github.scarsz.discordsrv.dependencies.ws.client.WebSocketThread.run(WebSocketThread.java:45)
А при запуске самого плагина, как он включается, пишет:
[Пн, 12. окт 2020 15:19:43 AZT ERROR] [DiscordSRV] Plugin DiscordSRV v1.20.0 has failed to register events for class github.scarsz.discordsrv.hooks.chat.ChattyChatHook because ru/mrbrikster/chatty/api/events/ChattyMessageEvent does not exist.
Мне почему-то казалось, что эта фишка включена вообще во все менеджеры чатов, но, почему-то, в Chatty этого либо нет, либо у меня это просто не работает.
Сообщения при входе/выходе, а также аннонсер, по неизвестной мне причине не вытягивают плейсхолдеры.
Пример сообщения входа на сервер:
При условии, что /papi parse me %luckperms_prefix%
работает отлично.
chats:
l1:
enable: true
format: '&7(Шепотом)&r {prefix} {player} {suffix} &8→ &7{message}'
range: 10
cooldown: -1
l2:
enable: true
format: '&7(Говорит)&r {prefix} {player} {suffix} &8→ &7{message}'
range: 25
cooldown: -1
l3:
enable: true
format: '&7(Кричит)&r {prefix} {player} {suffix} &8→ &7{message}'
range: 100
cooldown: -1
l4:
enable: false
format: '&e(Слухи)&r {prefix} {player} {suffix} &8→ &e{message}'
range: 9000
cooldown: -1
[14:26:58 ERROR]: Could not pass event AsyncPlayerChatEvent to Chatty v2.18.1
ru.mrbrikster.chatty.util.gson.JsonSyntaxException: ru.mrbrikster.chatty.util.gson.stream.MalformedJsonException: Unterminated string at line 1 column 7832 path $.last-pm-interlocutor.IN_DANIBR
at ru.mrbrikster.chatty.util.gson.internal.Streams.parse(Streams.java:60) ~[?:?]
at ru.mrbrikster.chatty.util.gson.JsonParser.parse(JsonParser.java:84) ~[?:?]
at ru.mrbrikster.chatty.util.gson.JsonParser.parse(JsonParser.java:59) ~[?:?]
at ru.mrbrikster.chatty.util.gson.JsonParser.parse(JsonParser.java:45) ~[?:?]
at ru.mrbrikster.chatty.chat.JsonStorage.getProperty(JsonStorage.java:78) ~[?:?]
at ru.mrbrikster.chatty.chat.JsonStorage.getProperty(JsonStorage.java:106) ~[?:?]
at ru.mrbrikster.chatty.chat.Chat.lambda$getRecipients$1(Chat.java:65) ~[?:?]
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176) ~[?:?]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1624) ~[?:?]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[?:?]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[?:?]
at ru.mrbrikster.chatty.chat.Chat.getRecipients(Chat.java:82) ~[?:?]
at ru.mrbrikster.chatty.chat.ChatListener.onChat(ChatListener.java:161) ~[?:?]
at ru.mrbrikster.chatty.chat.ChatListener.execute(ChatListener.java:95) ~[?:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.15.2.jar:git-Tuinity-"e41b5ce"]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.15.2.jar:git-Tuinity-"e41b5ce"]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.15.2.jar:git-Tuinity-"e41b5ce"]
at net.minecraft.server.v1_15_R1.PlayerConnection.chat(PlayerConnection.java:1785) ~[patched_1.15.2.jar:git-Tuinity-"e41b5ce"]
at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1700) ~[patched_1.15.2.jar:git-Tuinity-"e41b5ce"]
at net.minecraft.server.v1_15_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:41) ~[patched_1.15.2.jar:git-Tuinity-"e41b5ce"]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: ru.mrbrikster.chatty.util.gson.stream.MalformedJsonException: Unterminated string at line 1 column 7832 path $.last-pm-interlocutor.IN_DANIBR
at ru.mrbrikster.chatty.util.gson.stream.JsonReader.syntaxError(JsonReader.java:1568) ~[?:?]
at ru.mrbrikster.chatty.util.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1031) ~[?:?]
at ru.mrbrikster.chatty.util.gson.stream.JsonReader.nextString(JsonReader.java:815) ~[?:?]
at ru.mrbrikster.chatty.util.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:702) ~[?:?]
at ru.mrbrikster.chatty.util.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:723) ~[?:?]
at ru.mrbrikster.chatty.util.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:723) ~[?:?]
at ru.mrbrikster.chatty.util.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:698) ~[?:?]
at ru.mrbrikster.chatty.util.gson.internal.Streams.parse(Streams.java:48) ~[?:?]
... 27 more
При попытке скомпилить последний снапшот под 1.16 выходит сделать только chatty-api, под chatty-spigot оно не может обратится к нужным зависимостям, если я верно понял, из-за неработающего сайта.
Downloading from nametagedit-repo: http://ci.nametagedit.com/plugin/repository/everything/com/nametagedit/nametagedit/4.1.0/nametagedit-4.1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Chatty 2.19-SNAPSHOT:
[INFO]
[INFO] Chatty ............................................. SUCCESS [ 0.144 s]
[INFO] chatty-api ......................................... SUCCESS [ 5.405 s]
[INFO] chatty-spigot ...................................... FAILURE [ 1.387 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.148 s
[INFO] Finished at: 2020-07-19T19:43:05+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project chatty-spigot: Could not resolve dependencies for project ru.mrbrikster:chatty-spigot:jar:2.19-SNAPSHOT: Failed to collect dependencies at com.nametagedit:nametagedit:jar:4.1.0: Failed to read artifact descriptor for com.nametagedit:nametagedit:jar:4.1.0: Could not transfer artifact com.nametagedit:nametagedit:pom:4.1.0 from/to nametagedit-repo (http://ci.nametagedit.com/plugin/repository/everything/): Transfer failed for http://ci.nametagedit.com/plugin/repository/everything/com/nametagedit/nametagedit/4.1.0/nametagedit-4.1.0.pom 503 Service Unavailable -> [Help 1]
Не знаю, почему не задумался об этом раньше. Предлагаю добавить несколько новых плейсхолдеров:
%chatty_currentchat_{player_name}%
- Возвращает строку - название канала чата (а лучше displayname, о котором говорилось в одном из моих предложений), в котором находится указанный в скобках игрок.
%chatty_chat_cooldown%
- Возвращает дробное значение (при желании можно округлить плейсхолдером math) задержки до отправки следующего сообщения.
%chatty_playercount_{chat_channel_name}%
- Возвращает интовое значение - количество игроков, на данный момент находящихся в указанном канале чата.
Если я перейду в глобальный чат при помощи команды /globalchat
, а затем напишу сообщение вида !Всем привет
, то знак восклицания все равно удалится для отправки сообщения в глобал.
Предложение: Не заменять символ чата, если игрок уже в нём находится.
Hello!
When the Chatty plugin is installed, all messages about the player’s join/quit/death, including messages from other plugins (for example, DeathMessagesPrime) are blocked if
misc:
join/quit/death:
message: ''
or overwritten if
misc:
join/quit/death:
message: 'anything'
I ask you to add an option to the config, which would allow you to completely disable listening to the join/quit/death events.
Best regards.
Hey, looking to hook Chatty into DiscordSRV, I'd need;
На данный момент сообщения воспроизводятся поочередно - друг за другом. Было бы неплохо добавить возможность воспроизведения сообщений в случайном порядке.
Описание полностью соответствует названию темы. Пример задачи:
Есть админский чат, а-ка "StaffChat", доступ к нему осуществляется посредством команды /staffchat, но было бы неплохо также использовать /sc. Можно решить этот вопрос через левые плагины, вроде DeluxeCommands или MyCommand, но, думаю, реализация посредством этого плагина будет тоже не слишком сложной.
Здравствуйте! Такая вот проблема: в конфиге отключено логирование чата, но в папке /logs продолжают появляться log-файлы.
Конфиг-файл не резал, удалён только один блок - сообщения о гибели игрока. Помогите пожалуйста. Спасибо!
при попытке написать в чат настроенной для банжи выдает эту ошибку:
Could not pass event AsyncPlayerChatEvent to Chatty v2.18
org.bukkit.plugin.messaging.ChannelNotRegisteredException: Attempted to send a plugin message through the unregistered channel `BungeeCord'.
at org.bukkit.plugin.messaging.StandardMessenger.validatePluginMessage(StandardMessenger.java:544) ~[patched_1.16.1.jar:git-Paper-82]
at org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer.sendPluginMessage(CraftPlayer.java:1510) ~[patched_1.16.1.jar:git-Paper-82]
at ru.mrbrikster.chatty.bungee.BungeeBroadcaster.broadcast(BungeeBroadcaster.java:23) ~[?:?]
at ru.mrbrikster.chatty.chat.ChatListener.onChat(ChatListener.java:269) ~[?:?]
at ru.mrbrikster.chatty.chat.ChatListener.execute(ChatListener.java:95) ~[?:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.16.1.jar:git-Paper-82]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.1.jar:git-Paper-82]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.16.1.jar:git-Paper-82]
at net.minecraft.server.v1_16_R1.PlayerConnection.chat(PlayerConnection.java:1821) ~[patched_1.16.1.jar:git-Paper-82]
at net.minecraft.server.v1_16_R1.PlayerConnection.a(PlayerConnection.java:1736) ~[patched_1.16.1.jar:git-Paper-82]
at net.minecraft.server.v1_16_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:41) ~[patched_1.16.1.jar:git-Paper-82]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_251]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_251]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_251]
[16:14:54] [Async Chat Thread - #5/INFO]: [#] LLLL: asdas
Установлен на всех серверах. на банже включительно (верися для банжи).
Конфиги везде идентичны.
git-Paper-82 (1.16.1-R0.1-SNAPSHOT)
Конфиг (частично)
bunge:
enable: true
format: '[#] {prefix}{player}{suffix}: {message}'
range: -3
symbol: '*'
cooldown: 10
money: 10
command: 'maxchat'
bungeecord: true
config-version: '2.0'
# ******************************************************
# * Chatty (version 2.18)
При включенном форматировании JSON клик по цветному нику с плейсхолдером {player} (без PlaceholedAPI) также копирует и скрытые символы, в результате я получаю: §4SSKirillSS§r. Соответственно, использование такого в команде вызовет отключение от сервера из-за использования некорректных знаков. Возможно ли это как-то исправить?
Hi.
Paper 1.15.2
Chatty 2.16.1
In config I tried to place %deluxetags_tag%, but when I trying to send a message in chat, I gets error in console:
[14:46:23 ERROR]: Could not pass event AsyncPlayerChatEvent to Chatty v2.16.1 java.util.UnknownFormatConversionException: Conversion = ' ' at org.bukkit.event.player.AsyncPlayerChatEvent.setFormat(AsyncPlayerChatEvent.java:101) ~[patched_1.15.2.jar:git-Paper-121] at ru.mrbrikster.chatty.chat.ChatListener.onChat(ChatListener.java:160) ~[?:?] at ru.mrbrikster.chatty.chat.ChatListener.execute(ChatListener.java:97) ~[?:?] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.15.2.jar:git-Paper-121] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.15.2.jar:git-Paper-121] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:559) ~[patched_1.15.2.jar:git-Paper-121] at net.minecraft.server.v1_15_R1.PlayerConnection.chat(PlayerConnection.java:1734) ~[patched_1.15.2.jar:git-Paper-121] at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1649) ~[patched_1.15.2.jar:git-Paper-121] at net.minecraft.server.v1_15_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:41) ~[patched_1.15.2.jar:git-Paper-121] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_211] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_211] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_211] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_211] at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
When I am trying to use {deluxetags_tag}, that placeholder isn't working.
В данный момент мат может быть заменён на слово, указанное в поле moderation/swear/replacement. И, как я понимаю, такое слово может быть всего одно. Было бы неплохо, если бы эта опция поддерживала несколько предложенных слов, и при виде мата в чате заменяла на случайное из этого списка (моя основная цель в данном случае - заменять мат на звуки животных :3).
Совсем-совсем в идеале добавить поддержку форматирования текста, т.е. возможность окрасить слово, на которое будет заменяться мат. В качестве временной меры можно использовать окрашивание при помощи символа §, но с ним довольно неудобно работать, если есть несколько групп, и у каждой свой цвет текста.
<3
Когда игрок входит в ваниш, ему все еще можно писать личные сообщения. Можно ли сделать опцию для выключения этой возможности?
В файле конфигурации есть раздел moderation/caps/block, он по дефолту стоит на true. В описании к нему сказано, что если поставить на false, то сообщения будут отсылаться в нижнем регистре. Вне зависимости от того, что стоит в этой опции, сообщения всегда отправляются в нижнем регистре, если система капса их детектит.
Также, было бы неплохо, если бы в нижний опускало не всё сообщение, а, например, вот так:
Из...
ПРИВЕТ, КАК ДЕЛА? У МЕНЯ ОТЛИЧНО!
В...
Привет, как дела? У меня отлично!
Т.е. после знаков препинания, обозначающих конец предложения первый символ писать с большой буквы. Также, первый символ в предложении тоже писать с большой.
<3
Getting errors whenever someone types ... any clue?
[15:50:23] [Async Chat Thread - #0/INFO]: Calli: yee [15:50:59] [Async Chat Thread - #0/ERROR]: Could not pass event AsyncPlayerChatEvent to Chatty v2.1 org.bukkit.event.EventException: null at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:308) ~[spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:482) [spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at net.minecraft.server.v1_13_R1.PlayerConnection.chat(PlayerConnection.java:1556) [spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at net.minecraft.server.v1_13_R1.PlayerConnection.a(PlayerConnection.java:1494) [spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at net.minecraft.server.v1_13_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39) [spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_171] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_171] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_171] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_171] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171] Caused by: java.lang.IllegalStateException: Asynchronous command dispatch! at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14) ~[spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at org.bukkit.craftbukkit.v1_13_R1.CraftServer.dispatchCommand(CraftServer.java:691) ~[spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at org.bukkit.Bukkit.dispatchCommand(Bukkit.java:576) ~[spigot-1.13.jar:git-Spigot-1503de9-cfc6796] at ru.mrbrikster.chatty.fanciful.FancyMessage.send(FancyMessage.java:472) ~[?:?] at ru.mrbrikster.chatty.fanciful.FancyMessage.send(FancyMessage.java:496) ~[?:?] at ru.mrbrikster.chatty.json.FormattedMessage.send(FormattedMessage.java:23) ~[?:?] at ru.mrbrikster.chatty.listeners.ChatListener.onJsonMessage(ChatListener.java:266) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_171] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_171] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_171] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:304) ~[spigot-1.13.jar:git-Spigot-1503de9-cfc6796] ... 11 more
As title says, replacements are not applied to console logging. Placeholder is being parsed from sender, so there should be possibility to display it in console.
replacements:
'country':
original: '{cc}'
text: '%sdlib_countrycode%'
tooltip:
- '&7{player} is from &f%sdlib_country%'
# Only for testing purposes; placeholder is not ready yet
'level':
original: '{l}'
text: '353'
tooltip:
- '&7{player} has &f353&7 level.'
[22:58:44] [Async Chat Thread - #3/INFO]: [{cc}] [{l}] [Owner] [Grabsky]: Test
Добавить упоминание игроков через @
При упоминании игрока в чате происходит следующее:
https://pastebin.com/kLyQA7W0
Само упоминание работает корректно, игрок получает уведомление, но вот ошибками спамит знатно.
Было бы неплохо либо добавить фичу с упоминаниями в сам Chatty, либо дать возможность таким сообщениям идти только в глобал.
3? discordSRV? нормальных чатов с его поддержкой попросту не существует....
Спасибо огромное за плагин <3 Это самый удобный, простой и легко настраиваемый чат который я встречала!
Использую фильтр от VirtualMaks, добавил в вайтлист слово "корабля". Если в игре ввожу это слово строчными символами - всё нормально, но если хоть одна буква будет верхнего регистра - считает за мат.
Не знаю, проблема плагина это или фильтра, но выглядит так, будто первое.
Версия от 30 марта 2020.
It would be very good to be able to send messages using commands defined in the configuration as done with symbols.
Exemple:
chats:
local:
enable: true
format: '[Local] {prefix}{player}{suffix}: {message}'
range: 100
cooldown: -1
command: 'localchat'
alias: 'l'
global:
enable: true
format: '[Global] {prefix}{player}{suffix}: {message}'
range: -1
symbol: '!'
cooldown: -1
command: 'globalchat'
alias: 'g'
So you can use /l <message>
and /g <message>
without fixing the channels like symbol.
Как и говорится в заглавии, было бы неплохо добавить возможность форматирования сообщений некоторых каналов в несколько строк. В качестве примера могу привести торговый чат. Обычно он ничем не отличается от других каналов, ведь зачастую единственным отличительным признаком является префикс. В качестве решения этой проблемы можно добавить ему по одной строке-разделителю сверху и снизу, в результате получится что-то вроде этого:
===========================================
[Торговля] SSKirillSS: Продам стак алмазов!
===========================================
Собственно, предложение заключается в добавлении возможности в конфиге определить несколько строк для форматирования текста в определенном канале, а не одну.
Заполнил следующим образом:
# Replacements for chat formats.
#
# You can replace some plain text with clickable parts
# to make chat more interactive.
#
# Available properties:
# text, tooltip, command, suggest, link.
replacements:
'Test':
# Original text.
original: 'Test'
# New text.
#
# Supports PlaceholderAPI.
# You can use "{player}" variable here.
#
# Remove this line, if you need original text.
text: 'TestReplacement'
# Hover tooltip for the text.
#
# Supports PlaceholderAPI.
#
# You can use "{player}" variable here.
tooltip:
- 'Test'
На выходе не вижу никаких изменений вообще. Как писал в чат Test
, так и пишу.
As title says, possibility to use PlaceholderAPI placeholders in miscellaneous.vanilla.*.message.
Не знаю, нужно писать тут разработчикам этих самих плагинов, или сюда, но на всякий случай...
Я использую IridiumSkyBlock, в нём есть плейсхолдер, отображающий уровень острова - [ISLAND_LEVEL], его я добавил в префикс к игроку - всё работает отлично, но если добавляю в json/tooltip - эффекта нет, отображается просто название плейсхолдера. Можно ли как-то это исправить, или нужно писать разработчикам ISkyBlock?
Принцип предельно прост: Если в сообщении игрока есть слова из списка, то это сообщение пересылается в определенный канал чата.
Где это может быть полезно? - Представим ситуацию, когда у вас есть торговый чат. В большинстве случаев на него всем всё равно, но... Я ХОЧУ ТОРГОВЫЙ ЧАТ. Так вот, если в сообщении игрока детектится "Продам" или "Куплю", то это сообщение автоматом пересылается в торговый.
Думаю, спектр применений этой функции куда шире, но в ситуации с торговым чатом это довольно неплохо звучит.
Хотелось бы узнать когда выйдет новая версия с фиксами?
Так же есть идея создать Discord сервер для связи.
Like this
https://imgur.com/a/UiCEpF0
Знаю, что ты русский, но это может быть интересно твоей зарубежной аудитории, поэтому написал на английском.
Очень прошу добавить такую фичу ❤
А ещё я хз куда кидать предложения/просьбы на гитхабе, буду благодарен, если объяснишь.
И насчёт API - Обязательно добавь, буду использовать.
И спасибо тебе большое за твою работу.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.