From f88b5574ec90653f571275bf398587b00618faf3 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Mon, 2 Sep 2024 14:49:10 +0200 Subject: [PATCH 01/16] repair OSD ref --- resources/js/components/map/OpenSeadragon.js | 11 ++++++----- resources/js/pages/Map.js | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/resources/js/components/map/OpenSeadragon.js b/resources/js/components/map/OpenSeadragon.js index 36ddec1..55e9638 100644 --- a/resources/js/components/map/OpenSeadragon.js +++ b/resources/js/components/map/OpenSeadragon.js @@ -9,7 +9,7 @@ export const Context = React.createContext({}); export const useOpenSeadragon = () => React.useContext(Context); -export const Provider = React.forwardRef(({ children }, ref) => { +export const Provider = ({ children, containerRef }) => { const { activeMap } = useParams(); const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams(); @@ -51,10 +51,10 @@ export const Provider = React.forwardRef(({ children }, ref) => { }, [searchParams, viewer]); React.useEffect(() => { - if (!ref.current) return; + if (!containerRef.current) return; const v = OpenSeadragon({ - element: ref.current, + element: containerRef.current, preserveViewport: true, sequenceMode: true, showNavigator: true, @@ -120,7 +120,7 @@ export const Provider = React.forwardRef(({ children }, ref) => { return () => { v.destroy(); }; - }, [ref.current]); + }, [containerRef.current]); React.useEffect(() => { if (!viewer) return; @@ -159,12 +159,13 @@ export const Provider = React.forwardRef(({ children }, ref) => { return {children} ; -}); +}; Provider.displayName = 'OpenSeadragonProvider'; Provider.propTypes = { children: PropTypes.node, + containerRef: PropTypes.shape({ current: PropTypes.instanceOf(Element) }), }; export default Provider; diff --git a/resources/js/pages/Map.js b/resources/js/pages/Map.js index cd3d96d..1ffd45a 100644 --- a/resources/js/pages/Map.js +++ b/resources/js/pages/Map.js @@ -24,7 +24,7 @@ export const Component = () => { - +

{t('map.heading')} - {t(`map.${activeMap}Long`)}

-- 2.39.2 From b8bec108a7fd625282407dec6e95075b3f5ca167 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Mon, 2 Sep 2024 18:16:00 +0200 Subject: [PATCH 02/16] public chat bot log --- app/Http/Controllers/ChatBotLogController.php | 15 +++++ app/Http/Controllers/SitemapXmlController.php | 7 ++ app/Models/ChatBotLog.php | 11 ++++ resources/js/app/Routes.js | 7 ++ resources/js/components/channel/Link.js | 29 +++++++++ resources/js/components/chat-bot-logs/Item.js | 9 ++- resources/js/components/chat-bot-logs/List.js | 33 ++++++++-- resources/js/components/episodes/Channel.js | 13 +--- resources/js/pages/HorstieLog.js | 64 +++++++++++++++++++ routes/api.php | 2 + 10 files changed, 172 insertions(+), 18 deletions(-) create mode 100644 app/Http/Controllers/ChatBotLogController.php create mode 100644 resources/js/components/channel/Link.js create mode 100644 resources/js/pages/HorstieLog.js diff --git a/app/Http/Controllers/ChatBotLogController.php b/app/Http/Controllers/ChatBotLogController.php new file mode 100644 index 0000000..86bb690 --- /dev/null +++ b/app/Http/Controllers/ChatBotLogController.php @@ -0,0 +1,15 @@ +orderBy('created_at', 'DESC')->limit(50); + return $logs->get()->toJson(); + } + +} diff --git a/app/Http/Controllers/SitemapXmlController.php b/app/Http/Controllers/SitemapXmlController.php index c538bc4..f85e40e 100644 --- a/app/Http/Controllers/SitemapXmlController.php +++ b/app/Http/Controllers/SitemapXmlController.php @@ -76,6 +76,13 @@ class SitemapXmlController extends Controller $urls[] = $url; } + $url = new SitemapUrl(); + $url->path = '/horstielog'; + $url->lastmod = ChatBotLog::latest()->first()->created_at; + $url->changefreq = 'daily'; + $url->priority = 0.5; + $urls[] = $url; + return response()->view('sitemap', [ 'urls' => $urls, ])->header('Content-Type', 'text/xml'); diff --git a/app/Models/ChatBotLog.php b/app/Models/ChatBotLog.php index a4f1f93..2819ee0 100644 --- a/app/Models/ChatBotLog.php +++ b/app/Models/ChatBotLog.php @@ -2,13 +2,24 @@ namespace App\Models; +use Illuminate\Broadcasting\Channel as PublicChannel; +use Illuminate\Database\Eloquent\BroadcastsEvents; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class ChatBotLog extends Model { + use BroadcastsEvents; use HasFactory; + public function broadcastOn($event) { + return new PublicChannel('ChatBotLog'); + } + + public function broadcastWith($event) { + $this->load(['channel', 'origin', 'user']); + } + public function channel() { return $this->belongsTo(Channel::class); } diff --git a/resources/js/app/Routes.js b/resources/js/app/Routes.js index 0e35ddb..5e12004 100644 --- a/resources/js/app/Routes.js +++ b/resources/js/app/Routes.js @@ -53,6 +53,13 @@ const router = createBrowserRouter( '../pages/AlttpSeed' )} /> + import( + /* webpackChunkName: "horstie" */ + '../pages/HorstieLog' + )} + /> } diff --git a/resources/js/components/channel/Link.js b/resources/js/components/channel/Link.js new file mode 100644 index 0000000..cb6cb79 --- /dev/null +++ b/resources/js/components/channel/Link.js @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { Button } from 'react-bootstrap'; + +import Icon from '../common/Icon'; + +const Link = ({ channel }) => { + return ; +}; + +Link.propTypes = { + channel: PropTypes.shape({ + short_name: PropTypes.string, + stream_link: PropTypes.string, + title: PropTypes.string, + }), +}; + +export default Link; diff --git a/resources/js/components/chat-bot-logs/Item.js b/resources/js/components/chat-bot-logs/Item.js index 4c55c59..9b4cfcb 100644 --- a/resources/js/components/chat-bot-logs/Item.js +++ b/resources/js/components/chat-bot-logs/Item.js @@ -4,6 +4,7 @@ import React from 'react'; import { ListGroup } from 'react-bootstrap'; import { useTranslation } from 'react-i18next'; +import ChannelLink from '../channel/Link'; import { getUserName } from '../../helpers/User'; const getEntryDate = entry => moment(entry.created_at).fromNow(); @@ -42,7 +43,7 @@ const getEntryInfo = (entry, t) => { const Item = ({ entry = {} }) => { const { t } = useTranslation(); - return + return
{entry.text} @@ -61,11 +62,17 @@ const Item = ({ entry = {} }) => { {getEntryInfo(entry, t)}
+ {entry.channel ? +
+ +
+ : null}
; }; Item.propTypes = { entry: PropTypes.shape({ + channel: PropTypes.shape({}), created_at: PropTypes.string, origin: PropTypes.shape({}), text: PropTypes.string, diff --git a/resources/js/components/chat-bot-logs/List.js b/resources/js/components/chat-bot-logs/List.js index 0411299..52a4de8 100644 --- a/resources/js/components/chat-bot-logs/List.js +++ b/resources/js/components/chat-bot-logs/List.js @@ -4,16 +4,37 @@ import { ListGroup } from 'react-bootstrap'; import Item from './Item'; -const List = ({ log = [] }) => - - {log ? log.map(entry => - - ) : null} - ; +class List extends React.Component { + + componentDidMount() { + this.timer = setInterval(() => { + this.forceUpdate(); + }, 30000); + } + + componentWillUnmount() { + clearInterval(this.timer); + } + + render() { + const { log } = this.props; + + return + {log ? log.map(entry => + + ) : null} + ; + } + +} List.propTypes = { log: PropTypes.arrayOf(PropTypes.shape({ })), }; +List.defaultProps = { + log: [], +}; + export default List; diff --git a/resources/js/components/episodes/Channel.js b/resources/js/components/episodes/Channel.js index e2d25d7..24569be 100644 --- a/resources/js/components/episodes/Channel.js +++ b/resources/js/components/episodes/Channel.js @@ -2,6 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import { Button } from 'react-bootstrap'; +import Link from '../channel/Link'; import Icon from '../common/Icon'; import { mayEditRestream } from '../../helpers/permissions'; import { useUser } from '../../hooks/user'; @@ -10,17 +11,7 @@ const Channel = ({ channel, episode, onEditRestream }) => { const { user } = useUser(); return
- + {onEditRestream && mayEditRestream(user, episode, channel) ? +
+
+ {showContext ? +
+ {contextLoading ? + + : null} + {context ? + + +

{t('chatBotLog.context')}

+ + + {context.original ? + +

{t('chatBotLog.originalContext')}

+ + + : null} +
+ : null}
: null} ; diff --git a/resources/js/components/chat-logs/Item.js b/resources/js/components/chat-logs/Item.js new file mode 100644 index 0000000..52110e3 --- /dev/null +++ b/resources/js/components/chat-logs/Item.js @@ -0,0 +1,53 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +const getChatterColor = entry => { + if (entry.tags && entry.tags['color']) { + return entry.tags['color']; + } + return 'inherit'; +}; + +const getChatterNick = entry => { + if (entry.tags && entry.tags['display-name']) { + return entry.tags['display-name']; + } + return entry.nick; +}; + +const getTextContent = entry => { + if (entry.params && entry.params.length >= 2) { + return entry.params[1]; + } + return entry.text_content; +}; + +const getTimestamp = entry => { + if (entry.tags && entry.tags['tmi-sent-ts']) { + return new Date(parseInt(entry.tags['tmi-sent-ts'], 10)); + } + return new Date(entry.created_at); +}; + +const Item = ({ entry }) => { + const { t } = useTranslation(); + + return
+
+ + {t('chatBotLog.shortTimestamp', { date: getTimestamp(entry) })} + + {getChatterNick(entry)} +
+
{getTextContent(entry)}
+
; +}; + +Item.propTypes = { + entry: PropTypes.shape({ + text_content: PropTypes.string, + }).isRequired, +}; + +export default Item; diff --git a/resources/js/components/chat-logs/List.js b/resources/js/components/chat-logs/List.js new file mode 100644 index 0000000..8da17e2 --- /dev/null +++ b/resources/js/components/chat-logs/List.js @@ -0,0 +1,19 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import Item from './Item'; + +const List = ({ log = [] }) => { + return
+ {log.map(entry => + + )} +
; +}; + +List.propTypes = { + log: PropTypes.arrayOf(PropTypes.shape({ + })), +}; + +export default List; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index ce3faa6..3e32cee 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -98,6 +98,7 @@ export default { unset: 'Zurücksetzen', }, chatBotLog: { + context: 'Kontext', empty: 'Noch keine Nachrichten erfasst', heading: 'Chat Bot Protokoll', info: { @@ -108,6 +109,9 @@ export default { origin: { chatLog: 'Quelle: {{ nick }} in {{ channel }} am {{ date, L LT }}', }, + originalContext: 'Ursprünglicher Kontext', + shortTimestamp: '{{ date, HH:mm:ss }}', + showContext: 'Kontext zeigen', }, content: { attribution: 'Attribution', diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index afd1aa1..b8d8721 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -98,6 +98,7 @@ export default { unset: 'Unset', }, chatBotLog: { + context: 'Context', empty: 'No messages on protocol yet', heading: 'Chat Bot Log', info: { @@ -108,6 +109,9 @@ export default { origin: { chatLog: 'Source: {{ nick }} in {{ channel }} on {{ date, L LT }}', }, + originalContext: 'Original context', + shortTimestamp: '{{ date, hh:mm:ss }}', + showContext: 'Show context', }, content: { attribution: 'Attribution', diff --git a/resources/sass/app.scss b/resources/sass/app.scss index 7554a9e..910d382 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -7,6 +7,7 @@ // Custom @import 'common'; @import 'channels'; +@import 'chatlog'; @import 'discord'; @import 'doors'; @import 'episodes'; diff --git a/resources/sass/chatlog.scss b/resources/sass/chatlog.scss new file mode 100644 index 0000000..63f9a00 --- /dev/null +++ b/resources/sass/chatlog.scss @@ -0,0 +1,4 @@ +.chat-log-list { + padding: 0.5ex 1ex; + background: $dark; +} diff --git a/routes/api.php b/routes/api.php index e3ced1d..2818414 100644 --- a/routes/api.php +++ b/routes/api.php @@ -40,6 +40,7 @@ Route::put('channels/{channel}/guessing-game/{name}', 'App\Http\Controllers\Chan Route::get('guessing-game-monitor/{key}', 'App\Http\Controllers\ChannelController@getGuessingGameMonitor'); Route::get('chatbotlogs', 'App\Http\Controllers\ChatBotLogController@search'); +Route::get('chatbotlogs/{entry}/context', 'App\Http\Controllers\ChatBotLogController@getContext'); Route::get('content', 'App\Http\Controllers\TechniqueController@search'); Route::get('content/{tech:name}', 'App\Http\Controllers\TechniqueController@single'); -- 2.39.2 From 6cc05f0394ce36ba3298a76afe46e973ae9a7ab5 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Tue, 10 Sep 2024 17:08:47 +0200 Subject: [PATCH 09/16] add known bot --- app/Models/ChatLog.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Models/ChatLog.php b/app/Models/ChatLog.php index ae4c1c8..708c0e0 100644 --- a/app/Models/ChatLog.php +++ b/app/Models/ChatLog.php @@ -114,6 +114,7 @@ class ChatLog extends Model { 'kofistreambot', 'nidbot2000', 'nightbot', + 'phnxtyrolbot', 'pokemoncommunitygame', 'sery_bot', 'speedgaming', -- 2.39.2 From 9814bbb22cc4d455a7f6bb141988ecc201b7ac2c Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Thu, 12 Sep 2024 17:21:04 +0200 Subject: [PATCH 10/16] fix consecutive tokens --- app/TwitchBot/TokenizedMessage.php | 4 ++-- tests/Unit/TwitchBot/TokenizedMessageTest.php | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/TwitchBot/TokenizedMessage.php b/app/TwitchBot/TokenizedMessage.php index e8465fd..e33ec97 100644 --- a/app/TwitchBot/TokenizedMessage.php +++ b/app/TwitchBot/TokenizedMessage.php @@ -15,7 +15,7 @@ class TokenizedMessage { $this->text = mb_substr($text, mb_strlen($tags['reply-parent-display-name']) + 2); } $this->raw = strtolower(preg_replace('/[^\w]/u', '', $this->text)); - $this->tokens = array_values(array_map('trim', array_filter(preg_split('/\b/u', strtolower($this->text))))); + $this->tokens = array_values(array_filter(array_map('trim', array_filter(preg_split('/\b/u', strtolower($this->text)))))); $this->emoteless = $text; if (isset($this->tags['emotes']) && !empty($this->tags['emotes'])) { @@ -34,7 +34,7 @@ class TokenizedMessage { $this->emoteless = trim(preg_replace('/\s+/u', ' ', $this->emoteless)); } $this->emoteless_raw = strtolower(preg_replace('/[^\w]/u', '', $this->emoteless)); - $this->emoteless_tokens = array_values(array_map('trim', array_filter(preg_split('/\b/u', strtolower($this->emoteless))))); + $this->emoteless_tokens = array_values(array_filter(array_map('trim', array_filter(preg_split('/\b/u', strtolower($this->emoteless)))))); } public static function fromIRC(IRCMessage $msg) { diff --git a/tests/Unit/TwitchBot/TokenizedMessageTest.php b/tests/Unit/TwitchBot/TokenizedMessageTest.php index be5da8d..3678dcc 100644 --- a/tests/Unit/TwitchBot/TokenizedMessageTest.php +++ b/tests/Unit/TwitchBot/TokenizedMessageTest.php @@ -96,4 +96,8 @@ class TokenizedMessageTest extends TestCase { $this->assertTrue(TokenizedMessage::fromString('Willkommen auf Starbase 47')->isSpammy()); } + public function test_tokenizer() { + $this->assertTrue(TokenizedMessage::fromString('@HorstieBot wie viele warps?')->hasConsecutiveTokens(['wie', 'viele'])); + $this->assertFalse(TokenizedMessage::fromString('@HorstieBot wie viele warps?')->hasConsecutiveTokens(['wo', 'wurst'])); + } } -- 2.39.2 From d6567b7d02397de40f2a0b9740703fbdb267cf51 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Wed, 18 Sep 2024 19:00:53 +0200 Subject: [PATCH 11/16] add known bot --- app/Models/ChatLog.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Models/ChatLog.php b/app/Models/ChatLog.php index 708c0e0..75954b9 100644 --- a/app/Models/ChatLog.php +++ b/app/Models/ChatLog.php @@ -112,6 +112,7 @@ class ChatLog extends Model { 'fossabot', 'funtoon', 'kofistreambot', + 'lord_helmut_', 'nidbot2000', 'nightbot', 'phnxtyrolbot', -- 2.39.2 From aca2ba10a3c877c8014b7fcb619451528b37cbd8 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Tue, 8 Oct 2024 20:10:24 +0200 Subject: [PATCH 12/16] add known bot --- app/Models/ChatLog.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Models/ChatLog.php b/app/Models/ChatLog.php index 75954b9..8b2bfaf 100644 --- a/app/Models/ChatLog.php +++ b/app/Models/ChatLog.php @@ -118,6 +118,7 @@ class ChatLog extends Model { 'phnxtyrolbot', 'pokemoncommunitygame', 'sery_bot', + 'soundalerts', 'speedgaming', 'starbase47', 'streamelements', -- 2.39.2 From 7017479a3eb8f620c806cb142b340f6ff6450472 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Wed, 30 Oct 2024 00:46:35 +0100 Subject: [PATCH 13/16] fix zsr sync event query --- app/Console/Commands/SyncZSR.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/SyncZSR.php b/app/Console/Commands/SyncZSR.php index b7719e2..9c3b8ab 100644 --- a/app/Console/Commands/SyncZSR.php +++ b/app/Console/Commands/SyncZSR.php @@ -41,7 +41,7 @@ class SyncZSR extends Command { $events = Event::where('external_schedule', 'LIKE', 'zsr:%') ->where(function (Builder $query) { $query->whereNull('end'); - $query->orWhere('end', '<', now()); + $query->orWhere('end', '>', now()); }) ->get(); -- 2.39.2 From 8c0d8167c2c5df5cb4e9ffa1cf911b024125f83a Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 3 Nov 2024 11:52:06 +0100 Subject: [PATCH 14/16] minor fixes --- app/Console/Commands/TwitchAuth.php | 2 +- app/Models/ChatLog.php | 2 -- app/TwitchBot/IRCMessage.php | 1 + app/TwitchBot/TokenizedMessage.php | 1 - resources/js/pages/HorstieLog.js | 2 +- 5 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/Console/Commands/TwitchAuth.php b/app/Console/Commands/TwitchAuth.php index 94d8ada..043ad00 100644 --- a/app/Console/Commands/TwitchAuth.php +++ b/app/Console/Commands/TwitchAuth.php @@ -33,7 +33,7 @@ class TwitchAuth extends Command { if (!$token) { $token = new TwitchToken(); $token->nick = $this->argument('nick'); - $token->scope = ['chat:read', 'chat:edit', 'whispers:read', 'user:manage:whispers']; + $token->scope = ['chat:read', 'chat:edit', 'whispers:read', 'user:manage:whispers', 'moderator:manage:shoutouts']; } $url = $token->getAuthUrl(); $this->line('Please visit '.$url); diff --git a/app/Models/ChatLog.php b/app/Models/ChatLog.php index 8b2bfaf..1aca19d 100644 --- a/app/Models/ChatLog.php +++ b/app/Models/ChatLog.php @@ -5,8 +5,6 @@ namespace App\Models; use App\TwitchBot\TokenizedMessage; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; use LanguageDetection\Language; class ChatLog extends Model { diff --git a/app/TwitchBot/IRCMessage.php b/app/TwitchBot/IRCMessage.php index c256030..35ac278 100644 --- a/app/TwitchBot/IRCMessage.php +++ b/app/TwitchBot/IRCMessage.php @@ -93,6 +93,7 @@ class IRCMessage { } else { $str .= ';'; } + // TODO: this may need some kind of encoding? $str .= $name.'='; if (!empty($value)) { $str .= $value; diff --git a/app/TwitchBot/TokenizedMessage.php b/app/TwitchBot/TokenizedMessage.php index e33ec97..8cf83ba 100644 --- a/app/TwitchBot/TokenizedMessage.php +++ b/app/TwitchBot/TokenizedMessage.php @@ -3,7 +3,6 @@ namespace App\TwitchBot; use App\Models\ChatLog; -use Illuminate\Support\Arr; use Illuminate\Support\Str; class TokenizedMessage { diff --git a/resources/js/pages/HorstieLog.js b/resources/js/pages/HorstieLog.js index 55d3784..25661e0 100644 --- a/resources/js/pages/HorstieLog.js +++ b/resources/js/pages/HorstieLog.js @@ -26,7 +26,7 @@ export const Component = () => { } axios .get(`/api/chatbotlogs/`, { - signal: ctrl.signal + signal: ctrl.signal, }) .then(response => { setError(null); -- 2.39.2 From 808ef38da16fdb60a2c37890792aa38cf4b35b25 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 3 Nov 2024 21:59:26 +0100 Subject: [PATCH 15/16] fix catch --- app/Console/Commands/SyncLadder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/SyncLadder.php b/app/Console/Commands/SyncLadder.php index e6f800f..82450d1 100644 --- a/app/Console/Commands/SyncLadder.php +++ b/app/Console/Commands/SyncLadder.php @@ -58,7 +58,7 @@ class SyncLadder extends Command { foreach ($ladderSchedule as $ladderEntry) { try { $this->syncSchedule($event, $ladderEntry); - } catch (Exception $e) { + } catch (\Exception $e) { $this->error('error syncing episode '.$ladderEntry['race_id'].': '.$e->getMessage()); } } -- 2.39.2 From 9c7413d55c9c23db070018a0fe4a113acdcee48c Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 3 Nov 2024 22:07:34 +0100 Subject: [PATCH 16/16] add myustery circus link --- resources/js/app/Header.js | 7 ++++++- resources/js/i18n/de.js | 2 ++ resources/js/i18n/en.js | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/resources/js/app/Header.js b/resources/js/app/Header.js index ce30c32..b12682b 100644 --- a/resources/js/app/Header.js +++ b/resources/js/app/Header.js @@ -26,7 +26,12 @@ const Header = () => { diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index 3e32cee..90922a6 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -367,8 +367,10 @@ export default { uwShort: 'UW', }, menu: { + circus: 'Mystery Zirkus', map: 'Karte', schedule: 'Terminplan', + sdw: 'Seed der Woche', tech: 'Techniken', }, modes: { diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index b8d8721..f961bf0 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -367,8 +367,10 @@ export default { uwShort: 'UW', }, menu: { + circus: 'Mystery Circus', map: 'Map', schedule: 'Schedule', + sdw: 'Seed of the Week', tech: 'Tech', }, modes: { -- 2.39.2