diff --git a/chatterino.pro b/chatterino.pro index b272506c9..83d81792a 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -1,449 +1,464 @@ -QT += widgets core gui network multimedia svg concurrent -CONFIG += communi -COMMUNI += core model util - -INCLUDEPATH += src/ -TARGET = chatterino -TEMPLATE = app -PRECOMPILED_HEADER = src/PrecompiledHeader.hpp -CONFIG += precompile_header -DEFINES += CHATTERINO -DEFINES += "AB_NAMESPACE=chatterino" -DEFINES += AB_CUSTOM_THEME -DEFINES += AB_CUSTOM_SETTINGS -CONFIG += AB_NOT_STANDALONE - -useBreakpad { - LIBS += -L$$PWD/lib/qBreakpad/handler/build - include(lib/qBreakpad/qBreakpad.pri) - DEFINES += C_USE_BREAKPAD -} - -# use C++17 -win32-msvc* { - QMAKE_CXXFLAGS += /std:c++17 -} else { - QMAKE_CXXFLAGS += -std=c++17 -} - -# https://bugreports.qt.io/browse/QTBUG-27018 -equals(QMAKE_CXX, "clang++")|equals(QMAKE_CXX, "g++") { - TARGET = bin/chatterino -} - -# Icons -macx:ICON = resources/chatterino.icns -win32:RC_FILE = resources/windows.rc - -macx { - LIBS += -L/usr/local/lib -} - -# Submodules -DEFINES += IRC_NAMESPACE=Communi - -include(lib/warnings.pri) -include(lib/appbase.pri) -include(lib/fmt.pri) -include(lib/humanize.pri) -include(lib/libcommuni.pri) -include(lib/websocketpp.pri) -include(lib/wintoast.pri) -include(lib/signals.pri) -include(lib/settings.pri) -include(lib/serialize.pri) -include(lib/winsdk.pri) -include(lib/rapidjson.pri) - -exists( $$OUT_PWD/conanbuildinfo.pri ) { - message("Using conan packages") - CONFIG += conan_basic_setup - include($$OUT_PWD/conanbuildinfo.pri) - LIBS += -lGdi32 -} -else{ - include(lib/boost.pri) - include(lib/openssl.pri) -} - -# Optional feature: QtWebEngine -#exists ($(QTDIR)/include/QtWebEngine/QtWebEngine) { -# message(Using QWebEngine) -# QT += webenginewidgets -# DEFINES += "USEWEBENGINE" -#} - -SOURCES += \ - src/Application.cpp \ - src/autogenerated/ResourcesAutogen.cpp \ - src/BrowserExtension.cpp \ - src/common/Channel.cpp \ - src/common/CompletionModel.cpp \ - src/common/DownloadManager.cpp \ - src/common/Env.cpp \ - src/common/LinkParser.cpp \ - src/common/NetworkManager.cpp \ - src/common/NetworkPrivate.cpp \ - src/common/NetworkRequest.cpp \ - src/common/NetworkResult.cpp \ - src/common/UsernameSet.cpp \ - src/controllers/accounts/Account.cpp \ - src/controllers/accounts/AccountController.cpp \ - src/controllers/accounts/AccountModel.cpp \ - src/controllers/commands/Command.cpp \ - src/controllers/commands/CommandController.cpp \ - src/controllers/commands/CommandModel.cpp \ - src/controllers/highlights/HighlightBlacklistModel.cpp \ - src/controllers/highlights/HighlightController.cpp \ - src/controllers/highlights/HighlightModel.cpp \ - src/controllers/highlights/UserHighlightModel.cpp \ - src/controllers/ignores/IgnoreController.cpp \ - src/controllers/ignores/IgnoreModel.cpp \ - src/controllers/moderationactions/ModerationAction.cpp \ - src/controllers/moderationactions/ModerationActionModel.cpp \ - src/controllers/moderationactions/ModerationActions.cpp \ - src/controllers/notifications/NotificationController.cpp \ - src/controllers/notifications/NotificationModel.cpp \ - src/controllers/pings/PingController.cpp \ - src/controllers/pings/PingModel.cpp \ - src/controllers/taggedusers/TaggedUser.cpp \ - src/controllers/taggedusers/TaggedUsersController.cpp \ - src/controllers/taggedusers/TaggedUsersModel.cpp \ - src/main.cpp \ - src/messages/Emote.cpp \ - src/messages/Image.cpp \ - src/messages/ImageSet.cpp \ - src/messages/layouts/MessageLayout.cpp \ - src/messages/layouts/MessageLayoutContainer.cpp \ - src/messages/layouts/MessageLayoutElement.cpp \ - src/messages/Link.cpp \ - src/messages/Message.cpp \ - src/messages/MessageBuilder.cpp \ - src/messages/MessageColor.cpp \ - src/messages/MessageContainer.cpp \ - src/messages/MessageElement.cpp \ - src/providers/bttv/BttvEmotes.cpp \ - src/providers/bttv/LoadBttvChannelEmote.cpp \ - src/providers/chatterino/ChatterinoBadges.cpp \ - src/providers/emoji/Emojis.cpp \ - src/providers/ffz/FfzEmotes.cpp \ - src/providers/irc/AbstractIrcServer.cpp \ - src/providers/irc/IrcAccount.cpp \ - src/providers/irc/IrcChannel2.cpp \ - src/providers/irc/IrcConnection2.cpp \ - src/providers/irc/IrcServer.cpp \ - src/providers/LinkResolver.cpp \ - src/providers/twitch/ChatroomChannel.cpp \ - src/providers/twitch/IrcMessageHandler.cpp \ - src/providers/twitch/PartialTwitchUser.cpp \ - src/providers/twitch/PubsubActions.cpp \ - src/providers/twitch/PubsubClient.cpp \ - src/providers/twitch/PubsubHelpers.cpp \ - src/providers/twitch/TwitchAccount.cpp \ - src/providers/twitch/TwitchAccountManager.cpp \ - src/providers/twitch/TwitchApi.cpp \ - src/providers/twitch/TwitchBadges.cpp \ - src/providers/twitch/TwitchChannel.cpp \ - src/providers/twitch/TwitchEmotes.cpp \ - src/providers/twitch/TwitchHelpers.cpp \ - src/providers/twitch/TwitchMessageBuilder.cpp \ - src/providers/twitch/TwitchParseCheerEmotes.cpp \ - src/providers/twitch/TwitchServer.cpp \ - src/providers/twitch/TwitchUser.cpp \ - src/RunGui.cpp \ - src/singletons/Badges.cpp \ - src/singletons/Emotes.cpp \ - src/singletons/helper/GifTimer.cpp \ - src/singletons/helper/LoggingChannel.cpp \ - src/singletons/Logging.cpp \ - src/singletons/NativeMessaging.cpp \ - src/singletons/Paths.cpp \ - src/singletons/Resources.cpp \ - src/singletons/Settings.cpp \ - src/singletons/Theme.cpp \ - src/singletons/Toasts.cpp \ - src/singletons/TooltipPreviewImage.cpp \ - src/singletons/Updates.cpp \ - src/singletons/WindowManager.cpp \ - src/util/DebugCount.cpp \ - src/util/FormatTime.cpp \ - src/util/IncognitoBrowser.cpp \ - src/util/InitUpdateButton.cpp \ - src/util/JsonQuery.cpp \ - src/util/RapidjsonHelpers.cpp \ - src/util/StreamLink.cpp \ - src/widgets/AccountSwitchPopup.cpp \ - src/widgets/AccountSwitchWidget.cpp \ - src/widgets/AttachedWindow.cpp \ - src/widgets/dialogs/EmotePopup.cpp \ - src/widgets/dialogs/LastRunCrashDialog.cpp \ - src/widgets/dialogs/LoginDialog.cpp \ - src/widgets/dialogs/LogsPopup.cpp \ - src/widgets/dialogs/NotificationPopup.cpp \ - src/widgets/dialogs/QualityPopup.cpp \ - src/widgets/dialogs/SelectChannelDialog.cpp \ - src/widgets/dialogs/SettingsDialog.cpp \ - src/widgets/dialogs/TextInputDialog.cpp \ - src/widgets/dialogs/UpdateDialog.cpp \ - src/widgets/dialogs/UserInfoPopup.cpp \ - src/widgets/dialogs/WelcomeDialog.cpp \ - src/widgets/helper/ChannelView.cpp \ - src/widgets/helper/ComboBoxItemDelegate.cpp \ - src/widgets/helper/DebugPopup.cpp \ - src/widgets/helper/EditableModelView.cpp \ - src/widgets/helper/NotebookButton.cpp \ - src/widgets/helper/NotebookTab.cpp \ - src/widgets/helper/ResizingTextEdit.cpp \ - src/widgets/helper/ScrollbarHighlight.cpp \ - src/widgets/helper/SearchPopup.cpp \ - src/widgets/helper/SettingsDialogTab.cpp \ - src/widgets/Notebook.cpp \ - src/widgets/Scrollbar.cpp \ - src/widgets/settingspages/AboutPage.cpp \ - src/widgets/settingspages/AccountsPage.cpp \ - src/widgets/settingspages/CommandPage.cpp \ - src/widgets/settingspages/ExternalToolsPage.cpp \ - src/widgets/settingspages/GeneralPage.cpp \ - src/widgets/settingspages/HighlightingPage.cpp \ - src/widgets/settingspages/IgnoresPage.cpp \ - src/widgets/settingspages/KeyboardSettingsPage.cpp \ - src/widgets/settingspages/ModerationPage.cpp \ - src/widgets/settingspages/NotificationPage.cpp \ - src/widgets/settingspages/SettingsPage.cpp \ - src/widgets/splits/ClosedSplits.cpp \ - src/widgets/splits/Split.cpp \ - src/widgets/splits/SplitContainer.cpp \ - src/widgets/splits/SplitHeader.cpp \ - src/widgets/splits/SplitInput.cpp \ - src/widgets/splits/SplitOverlay.cpp \ - src/widgets/StreamView.cpp \ - src/widgets/Window.cpp \ - -HEADERS += \ - src/Application.hpp \ - src/ForwardDecl.hpp \ - src/autogenerated/ResourcesAutogen.hpp \ - src/BrowserExtension.hpp \ - src/common/Aliases.hpp \ - src/common/Atomic.hpp \ - src/common/Channel.hpp \ - src/common/Common.hpp \ - src/common/CompletionModel.hpp \ - src/common/ConcurrentMap.hpp \ - src/common/DownloadManager.hpp \ - src/common/Env.hpp \ - src/common/LinkParser.hpp \ - src/common/NetworkCommon.hpp \ - src/common/NetworkManager.hpp \ - src/common/NetworkPrivate.hpp \ - src/common/NetworkRequest.hpp \ - src/common/NetworkResult.hpp \ - src/common/NullablePtr.hpp \ - src/common/ProviderId.hpp \ - src/common/SignalVector.hpp \ - src/common/SignalVectorModel.hpp \ - src/common/UniqueAccess.hpp \ - src/common/UsernameSet.hpp \ - src/common/Version.hpp \ - src/controllers/accounts/Account.hpp \ - src/controllers/accounts/AccountController.hpp \ - src/controllers/accounts/AccountModel.hpp \ - src/controllers/commands/Command.hpp \ - src/controllers/commands/CommandController.hpp \ - src/controllers/commands/CommandModel.hpp \ - src/controllers/highlights/HighlightBlacklistModel.hpp \ - src/controllers/highlights/HighlightBlacklistUser.hpp \ - src/controllers/highlights/HighlightController.hpp \ - src/controllers/highlights/HighlightModel.hpp \ - src/controllers/highlights/HighlightPhrase.hpp \ - src/controllers/highlights/UserHighlightModel.hpp \ - src/controllers/ignores/IgnoreController.hpp \ - src/controllers/ignores/IgnoreModel.hpp \ - src/controllers/ignores/IgnorePhrase.hpp \ - src/controllers/moderationactions/ModerationAction.hpp \ - src/controllers/moderationactions/ModerationActionModel.hpp \ - src/controllers/moderationactions/ModerationActions.hpp \ - src/controllers/notifications/NotificationController.hpp \ - src/controllers/notifications/NotificationModel.hpp \ - src/controllers/pings/PingController.hpp \ - src/controllers/pings/PingModel.hpp \ - src/controllers/taggedusers/TaggedUser.hpp \ - src/controllers/taggedusers/TaggedUsersController.hpp \ - src/controllers/taggedusers/TaggedUsersModel.hpp \ - src/messages/Emote.hpp \ - src/messages/Image.hpp \ - src/messages/ImageSet.hpp \ - src/messages/layouts/MessageLayout.hpp \ - src/messages/layouts/MessageLayoutContainer.hpp \ - src/messages/layouts/MessageLayoutElement.hpp \ - src/messages/LimitedQueue.hpp \ - src/messages/LimitedQueueSnapshot.hpp \ - src/messages/Link.hpp \ - src/messages/Message.hpp \ - src/messages/MessageBuilder.hpp \ - src/messages/MessageColor.hpp \ - src/messages/MessageContainer.hpp \ - src/messages/MessageElement.hpp \ - src/messages/MessageParseArgs.hpp \ - src/messages/Selection.hpp \ - src/PrecompiledHeader.hpp \ - src/providers/bttv/BttvEmotes.hpp \ - src/providers/bttv/LoadBttvChannelEmote.hpp \ - src/providers/chatterino/ChatterinoBadges.hpp \ - src/providers/emoji/Emojis.hpp \ - src/providers/ffz/FfzEmotes.hpp \ - src/providers/irc/AbstractIrcServer.hpp \ - src/providers/irc/IrcAccount.hpp \ - src/providers/irc/IrcChannel2.hpp \ - src/providers/irc/IrcConnection2.hpp \ - src/providers/irc/IrcServer.hpp \ - src/providers/LinkResolver.hpp \ - src/providers/twitch/ChatroomChannel.hpp \ - src/providers/twitch/EmoteValue.hpp \ - src/providers/twitch/IrcMessageHandler.hpp \ - src/providers/twitch/PartialTwitchUser.hpp \ - src/providers/twitch/PubsubActions.hpp \ - src/providers/twitch/PubsubClient.hpp \ - src/providers/twitch/PubsubHelpers.hpp \ - src/providers/twitch/TwitchAccount.hpp \ - src/providers/twitch/TwitchAccountManager.hpp \ - src/providers/twitch/TwitchApi.hpp \ - src/providers/twitch/TwitchBadges.hpp \ - src/providers/twitch/TwitchChannel.hpp \ - src/providers/twitch/TwitchCommon.hpp \ - src/providers/twitch/TwitchEmotes.hpp \ - src/providers/twitch/TwitchHelpers.hpp \ - src/providers/twitch/TwitchMessageBuilder.hpp \ - src/providers/twitch/TwitchParseCheerEmotes.hpp \ - src/providers/twitch/TwitchServer.hpp \ - src/providers/twitch/TwitchUser.hpp \ - src/RunGui.hpp \ - src/singletons/Badges.hpp \ - src/singletons/Emotes.hpp \ - src/singletons/helper/GifTimer.hpp \ - src/singletons/helper/LoggingChannel.hpp \ - src/singletons/Logging.hpp \ - src/singletons/NativeMessaging.hpp \ - src/singletons/Paths.hpp \ - src/singletons/Resources.hpp \ - src/singletons/Settings.hpp \ - src/singletons/Theme.hpp \ - src/singletons/Toasts.hpp \ - src/singletons/TooltipPreviewImage.hpp \ - src/singletons/Updates.hpp \ - src/singletons/WindowManager.hpp \ - src/util/ConcurrentMap.hpp \ - src/util/DebugCount.hpp \ - src/util/FormatTime.hpp \ - src/util/IncognitoBrowser.hpp \ - src/util/InitUpdateButton.hpp \ - src/util/IrcHelpers.hpp \ - src/util/IsBigEndian.hpp \ - src/util/JsonQuery.hpp \ - src/util/LayoutCreator.hpp \ - src/util/QObjectRef.hpp \ - src/util/QStringHash.hpp \ - src/util/rangealgorithm.hpp \ - src/util/RapidjsonHelpers.hpp \ - src/util/RemoveScrollAreaBackground.hpp \ - src/util/SharedPtrElementLess.hpp \ - src/util/StandardItemHelper.hpp \ - src/util/StreamLink.hpp \ - src/widgets/AccountSwitchPopup.hpp \ - src/widgets/AccountSwitchWidget.hpp \ - src/widgets/AttachedWindow.hpp \ - src/widgets/dialogs/EmotePopup.hpp \ - src/widgets/dialogs/LastRunCrashDialog.hpp \ - src/widgets/dialogs/LoginDialog.hpp \ - src/widgets/dialogs/LogsPopup.hpp \ - src/widgets/dialogs/NotificationPopup.hpp \ - src/widgets/dialogs/QualityPopup.hpp \ - src/widgets/dialogs/SelectChannelDialog.hpp \ - src/widgets/dialogs/SettingsDialog.hpp \ - src/widgets/dialogs/TextInputDialog.hpp \ - src/widgets/dialogs/UpdateDialog.hpp \ - src/widgets/dialogs/UserInfoPopup.hpp \ - src/widgets/dialogs/WelcomeDialog.hpp \ - src/widgets/helper/ChannelView.hpp \ - src/widgets/helper/ComboBoxItemDelegate.hpp \ - src/widgets/helper/CommonTexts.hpp \ - src/widgets/helper/DebugPopup.hpp \ - src/widgets/helper/EditableModelView.hpp \ - src/widgets/helper/Line.hpp \ - src/widgets/helper/NotebookButton.hpp \ - src/widgets/helper/NotebookTab.hpp \ - src/widgets/helper/ResizingTextEdit.hpp \ - src/widgets/helper/ScrollbarHighlight.hpp \ - src/widgets/helper/SearchPopup.hpp \ - src/widgets/helper/SettingsDialogTab.hpp \ - src/widgets/Notebook.hpp \ - src/widgets/Scrollbar.hpp \ - src/widgets/settingspages/AboutPage.hpp \ - src/widgets/settingspages/AccountsPage.hpp \ - src/widgets/settingspages/CommandPage.hpp \ - src/widgets/settingspages/ExternalToolsPage.hpp \ - src/widgets/settingspages/GeneralPage.hpp \ - src/widgets/settingspages/HighlightingPage.hpp \ - src/widgets/settingspages/IgnoresPage.hpp \ - src/widgets/settingspages/KeyboardSettingsPage.hpp \ - src/widgets/settingspages/ModerationPage.hpp \ - src/widgets/settingspages/NotificationPage.hpp \ - src/widgets/settingspages/SettingsPage.hpp \ - src/widgets/splits/ClosedSplits.hpp \ - src/widgets/splits/Split.hpp \ - src/widgets/splits/SplitContainer.hpp \ - src/widgets/splits/SplitHeader.hpp \ - src/widgets/splits/SplitInput.hpp \ - src/widgets/splits/SplitOverlay.hpp \ - src/widgets/StreamView.hpp \ - src/widgets/Window.hpp \ - -RESOURCES += \ - resources/resources.qrc \ - resources/resources_autogenerated.qrc - -DISTFILES += - -FORMS += - -# do not use windows min/max macros -#win32 { -# DEFINES += NOMINMAX -#} - -linux:isEmpty(PREFIX) { - message("Using default installation prefix (/usr/local). Change PREFIX in qmake command") - PREFIX = /usr/local -} - -linux { - desktop.files = resources/chatterino.desktop - desktop.path = $$PREFIX/share/applications - - build_icons.path = . - build_icons.commands = @echo $$PWD && mkdir -p $$PWD/resources/linuxinstall/icons/hicolor/256x256 && cp $$PWD/resources/icon.png $$PWD/resources/linuxinstall/icons/hicolor/256x256/chatterino.png - - icon.files = $$PWD/resources/linuxinstall/icons/hicolor/256x256/chatterino.png - icon.path = $$PREFIX/share/icons/hicolor/256x256/apps - - target.path = $$PREFIX/bin - - INSTALLS += desktop build_icons icon target -} - -git_commit=$$(GIT_COMMIT) -git_release=$$(GIT_RELEASE) -# Git data -isEmpty(git_commit) { -git_commit=$$system(git rev-parse HEAD) -} -isEmpty(git_release) { -git_release=$$system(git describe) -} -git_hash = $$str_member($$git_commit, 0, 8) - -# Passing strings as defines requires you to use this weird triple-escape then quotation mark syntax. -# https://stackoverflow.com/questions/3348711/add-a-define-to-qmake-with-a-value/18343449#18343449 -DEFINES += CHATTERINO_GIT_COMMIT=\\\"$$git_commit\\\" -DEFINES += CHATTERINO_GIT_RELEASE=\\\"$$git_release\\\" -DEFINES += CHATTERINO_GIT_HASH=\\\"$$git_hash\\\" +QT += widgets core gui network multimedia svg concurrent +CONFIG += communi +COMMUNI += core model util + +INCLUDEPATH += src/ +TARGET = chatterino +TEMPLATE = app +PRECOMPILED_HEADER = src/PrecompiledHeader.hpp +CONFIG += precompile_header +DEFINES += CHATTERINO +DEFINES += "AB_NAMESPACE=chatterino" +DEFINES += AB_CUSTOM_THEME +DEFINES += AB_CUSTOM_SETTINGS +CONFIG += AB_NOT_STANDALONE + +useBreakpad { + LIBS += -L$$PWD/lib/qBreakpad/handler/build + include(lib/qBreakpad/qBreakpad.pri) + DEFINES += C_USE_BREAKPAD +} + +# use C++17 +win32-msvc* { + QMAKE_CXXFLAGS += /std:c++17 +} else { + QMAKE_CXXFLAGS += -std=c++17 +} + +# https://bugreports.qt.io/browse/QTBUG-27018 +equals(QMAKE_CXX, "clang++")|equals(QMAKE_CXX, "g++") { + TARGET = bin/chatterino +} + +# Icons +macx:ICON = resources/chatterino.icns +win32:RC_FILE = resources/windows.rc + +macx { + LIBS += -L/usr/local/lib +} + +# Submodules +DEFINES += IRC_NAMESPACE=Communi + +include(lib/warnings.pri) +include(lib/appbase.pri) +include(lib/fmt.pri) +include(lib/humanize.pri) +include(lib/libcommuni.pri) +include(lib/websocketpp.pri) +include(lib/wintoast.pri) +include(lib/signals.pri) +include(lib/settings.pri) +include(lib/serialize.pri) +include(lib/winsdk.pri) +include(lib/rapidjson.pri) + +exists( $$OUT_PWD/conanbuildinfo.pri ) { + message("Using conan packages") + CONFIG += conan_basic_setup + include($$OUT_PWD/conanbuildinfo.pri) + LIBS += -lGdi32 +} +else{ + include(lib/boost.pri) + include(lib/openssl.pri) +} + +# Optional feature: QtWebEngine +#exists ($(QTDIR)/include/QtWebEngine/QtWebEngine) { +# message(Using QWebEngine) +# QT += webenginewidgets +# DEFINES += "USEWEBENGINE" +#} + +SOURCES += \ + src/Application.cpp \ + src/autogenerated/ResourcesAutogen.cpp \ + src/BrowserExtension.cpp \ + src/common/Channel.cpp \ + src/common/CompletionModel.cpp \ + src/common/DownloadManager.cpp \ + src/common/Env.cpp \ + src/common/LinkParser.cpp \ + src/common/NetworkPrivate.cpp \ + src/common/NetworkManager.cpp \ + src/common/NetworkRequest.cpp \ + src/common/NetworkResult.cpp \ + src/common/UsernameSet.cpp \ + src/controllers/accounts/Account.cpp \ + src/controllers/accounts/AccountController.cpp \ + src/controllers/accounts/AccountModel.cpp \ + src/controllers/commands/Command.cpp \ + src/controllers/commands/CommandController.cpp \ + src/controllers/commands/CommandModel.cpp \ + src/controllers/highlights/HighlightBlacklistModel.cpp \ + src/controllers/highlights/HighlightController.cpp \ + src/controllers/highlights/HighlightModel.cpp \ + src/controllers/highlights/UserHighlightModel.cpp \ + src/controllers/ignores/IgnoreController.cpp \ + src/controllers/ignores/IgnoreModel.cpp \ + src/controllers/moderationactions/ModerationAction.cpp \ + src/controllers/moderationactions/ModerationActionModel.cpp \ + src/controllers/moderationactions/ModerationActions.cpp \ + src/controllers/notifications/NotificationController.cpp \ + src/controllers/notifications/NotificationModel.cpp \ + src/controllers/taggedusers/TaggedUser.cpp \ + src/controllers/taggedusers/TaggedUsersController.cpp \ + src/controllers/taggedusers/TaggedUsersModel.cpp \ + src/main.cpp \ + src/messages/Emote.cpp \ + src/messages/Image.cpp \ + src/messages/ImageSet.cpp \ + src/messages/layouts/MessageLayout.cpp \ + src/messages/layouts/MessageLayoutContainer.cpp \ + src/messages/layouts/MessageLayoutElement.cpp \ + src/messages/Link.cpp \ + src/messages/Message.cpp \ + src/messages/MessageBuilder.cpp \ + src/messages/MessageColor.cpp \ + src/messages/MessageContainer.cpp \ + src/messages/MessageElement.cpp \ + src/providers/bttv/BttvEmotes.cpp \ + src/providers/bttv/LoadBttvChannelEmote.cpp \ + src/providers/chatterino/ChatterinoBadges.cpp \ + src/providers/emoji/Emojis.cpp \ + src/providers/ffz/FfzEmotes.cpp \ + src/providers/ffz/FfzModBadge.cpp \ + src/providers/irc/AbstractIrcServer.cpp \ + src/providers/irc/IrcAccount.cpp \ + src/providers/irc/IrcChannel2.cpp \ + src/providers/irc/IrcConnection2.cpp \ + src/providers/irc/IrcServer.cpp \ + src/providers/LinkResolver.cpp \ + src/providers/twitch/ChatroomChannel.cpp \ + src/providers/twitch/IrcMessageHandler.cpp \ + src/providers/twitch/PartialTwitchUser.cpp \ + src/providers/twitch/PubsubActions.cpp \ + src/providers/twitch/PubsubClient.cpp \ + src/providers/twitch/PubsubHelpers.cpp \ + src/providers/twitch/TwitchAccount.cpp \ + src/providers/twitch/TwitchAccountManager.cpp \ + src/providers/twitch/TwitchApi.cpp \ + src/providers/twitch/TwitchBadges.cpp \ + src/providers/twitch/TwitchChannel.cpp \ + src/providers/twitch/TwitchEmotes.cpp \ + src/providers/twitch/TwitchHelpers.cpp \ + src/providers/twitch/TwitchMessageBuilder.cpp \ + src/providers/twitch/TwitchParseCheerEmotes.cpp \ + src/providers/twitch/TwitchServer.cpp \ + src/providers/twitch/TwitchUser.cpp \ + src/RunGui.cpp \ + src/singletons/Badges.cpp \ + src/singletons/Emotes.cpp \ + src/singletons/helper/GifTimer.cpp \ + src/singletons/helper/LoggingChannel.cpp \ + src/singletons/Logging.cpp \ + src/singletons/NativeMessaging.cpp \ + src/singletons/Paths.cpp \ + src/singletons/Resources.cpp \ + src/singletons/Settings.cpp \ + src/singletons/Theme.cpp \ + src/singletons/Toasts.cpp \ + src/singletons/Updates.cpp \ + src/singletons/WindowManager.cpp \ + src/singletons/TooltipPreviewImage.cpp \ + src/util/DebugCount.cpp \ + src/util/FormatTime.cpp \ + src/util/IncognitoBrowser.cpp \ + src/util/InitUpdateButton.cpp \ + src/util/JsonQuery.cpp \ + src/util/RapidjsonHelpers.cpp \ + src/util/StreamLink.cpp \ + src/widgets/AccountSwitchPopupWidget.cpp \ + src/widgets/AccountSwitchWidget.cpp \ + src/widgets/AttachedWindow.cpp \ + src/widgets/dialogs/EmotePopup.cpp \ + src/widgets/dialogs/LastRunCrashDialog.cpp \ + src/widgets/dialogs/LoginDialog.cpp \ + src/widgets/dialogs/LogsPopup.cpp \ + src/widgets/dialogs/NotificationPopup.cpp \ + src/widgets/dialogs/QualityPopup.cpp \ + src/widgets/dialogs/SelectChannelDialog.cpp \ + src/widgets/dialogs/SettingsDialog.cpp \ + src/widgets/dialogs/TextInputDialog.cpp \ + src/widgets/dialogs/UpdateDialog.cpp \ + src/widgets/dialogs/UserInfoPopup.cpp \ + src/widgets/dialogs/WelcomeDialog.cpp \ + src/widgets/helper/ChannelView.cpp \ + src/widgets/helper/ComboBoxItemDelegate.cpp \ + src/widgets/helper/DebugPopup.cpp \ + src/widgets/helper/EditableModelView.cpp \ + src/widgets/helper/NotebookButton.cpp \ + src/widgets/helper/NotebookTab.cpp \ + src/widgets/helper/ResizingTextEdit.cpp \ + src/widgets/helper/ScrollbarHighlight.cpp \ + src/widgets/helper/SearchPopup.cpp \ + src/widgets/helper/SettingsDialogTab.cpp \ + src/widgets/Notebook.cpp \ + src/widgets/Scrollbar.cpp \ + src/widgets/settingspages/AboutPage.cpp \ + src/widgets/settingspages/AccountsPage.cpp \ + src/widgets/settingspages/AdvancedPage.cpp \ + src/widgets/settingspages/BrowserExtensionPage.cpp \ + src/widgets/settingspages/CommandPage.cpp \ + src/widgets/settingspages/EmotesPage.cpp \ + src/widgets/settingspages/ExternalToolsPage.cpp \ + src/widgets/settingspages/FeelPage.cpp \ + src/widgets/settingspages/GeneralPage.cpp \ + src/widgets/settingspages/HighlightingPage.cpp \ + src/widgets/settingspages/IgnoresPage.cpp \ + src/widgets/settingspages/KeyboardSettingsPage.cpp \ + src/widgets/settingspages/LogsPage.cpp \ + src/widgets/settingspages/LookPage.cpp \ + src/widgets/settingspages/ModerationPage.cpp \ + src/widgets/settingspages/NotificationPage.cpp \ + src/widgets/settingspages/SettingsPage.cpp \ + src/widgets/settingspages/SpecialChannelsPage.cpp \ + src/widgets/splits/ClosedSplits.cpp \ + src/widgets/splits/Split.cpp \ + src/widgets/splits/SplitContainer.cpp \ + src/widgets/splits/SplitHeader.cpp \ + src/widgets/splits/SplitInput.cpp \ + src/widgets/splits/SplitOverlay.cpp \ + src/widgets/StreamView.cpp \ + src/widgets/Window.cpp \ + src/controllers/pings/PingController.cpp \ + src/controllers/pings/PingModel.cpp \ + +HEADERS += \ + src/Application.hpp \ + src/autogenerated/ResourcesAutogen.hpp \ + src/BrowserExtension.hpp \ + src/common/Aliases.hpp \ + src/common/Atomic.hpp \ + src/common/Channel.hpp \ + src/common/Common.hpp \ + src/common/CompletionModel.hpp \ + src/common/ConcurrentMap.hpp \ + src/common/DownloadManager.hpp \ + src/common/LinkParser.hpp \ + src/common/NetworkCommon.hpp \ + src/common/NetworkPrivate.hpp \ + src/common/NetworkManager.hpp \ + src/common/NetworkRequest.hpp \ + src/common/NetworkResult.hpp \ + src/common/NullablePtr.hpp \ + src/common/ProviderId.hpp \ + src/common/SignalVector.hpp \ + src/common/SignalVectorModel.hpp \ + src/common/UniqueAccess.hpp \ + src/common/UsernameSet.hpp \ + src/common/Version.hpp \ + src/controllers/accounts/Account.hpp \ + src/controllers/accounts/AccountController.hpp \ + src/controllers/accounts/AccountModel.hpp \ + src/controllers/commands/Command.hpp \ + src/controllers/commands/CommandController.hpp \ + src/controllers/commands/CommandModel.hpp \ + src/controllers/highlights/HighlightBlacklistModel.hpp \ + src/controllers/highlights/HighlightBlacklistUser.hpp \ + src/controllers/highlights/HighlightController.hpp \ + src/controllers/highlights/HighlightModel.hpp \ + src/controllers/highlights/HighlightPhrase.hpp \ + src/controllers/highlights/UserHighlightModel.hpp \ + src/controllers/ignores/IgnoreController.hpp \ + src/controllers/ignores/IgnoreModel.hpp \ + src/controllers/ignores/IgnorePhrase.hpp \ + src/controllers/moderationactions/ModerationAction.hpp \ + src/controllers/moderationactions/ModerationActionModel.hpp \ + src/controllers/moderationactions/ModerationActions.hpp \ + src/controllers/notifications/NotificationController.hpp \ + src/controllers/notifications/NotificationModel.hpp \ + src/controllers/taggedusers/TaggedUser.hpp \ + src/controllers/taggedusers/TaggedUsersController.hpp \ + src/controllers/taggedusers/TaggedUsersModel.hpp \ + src/messages/Emote.hpp \ + src/messages/Image.hpp \ + src/messages/ImageSet.hpp \ + src/messages/layouts/MessageLayout.hpp \ + src/messages/layouts/MessageLayoutContainer.hpp \ + src/messages/layouts/MessageLayoutElement.hpp \ + src/messages/LimitedQueue.hpp \ + src/messages/LimitedQueueSnapshot.hpp \ + src/messages/Link.hpp \ + src/messages/Message.hpp \ + src/messages/MessageBuilder.hpp \ + src/messages/MessageColor.hpp \ + src/messages/MessageContainer.hpp \ + src/messages/MessageElement.hpp \ + src/messages/MessageParseArgs.hpp \ + src/messages/Selection.hpp \ + src/PrecompiledHeader.hpp \ + src/providers/bttv/BttvEmotes.hpp \ + src/providers/bttv/LoadBttvChannelEmote.hpp \ + src/providers/chatterino/ChatterinoBadges.hpp \ + src/providers/emoji/Emojis.hpp \ + src/providers/ffz/FfzEmotes.hpp \ + src/providers/ffz/FfzModBadge.hpp \ + src/providers/irc/AbstractIrcServer.hpp \ + src/providers/irc/IrcAccount.hpp \ + src/providers/irc/IrcChannel2.hpp \ + src/providers/irc/IrcConnection2.hpp \ + src/providers/irc/IrcServer.hpp \ + src/providers/LinkResolver.hpp \ + src/providers/twitch/ChatroomChannel.hpp \ + src/providers/twitch/EmoteValue.hpp \ + src/providers/twitch/IrcMessageHandler.hpp \ + src/providers/twitch/PartialTwitchUser.hpp \ + src/providers/twitch/PubsubActions.hpp \ + src/providers/twitch/PubsubClient.hpp \ + src/providers/twitch/PubsubHelpers.hpp \ + src/providers/twitch/TwitchAccount.hpp \ + src/providers/twitch/TwitchAccountManager.hpp \ + src/providers/twitch/TwitchApi.hpp \ + src/providers/twitch/TwitchBadges.hpp \ + src/providers/twitch/TwitchChannel.hpp \ + src/providers/twitch/TwitchCommon.hpp \ + src/providers/twitch/TwitchEmotes.hpp \ + src/providers/twitch/TwitchHelpers.hpp \ + src/providers/twitch/TwitchMessageBuilder.hpp \ + src/providers/twitch/TwitchParseCheerEmotes.hpp \ + src/providers/twitch/TwitchServer.hpp \ + src/providers/twitch/TwitchUser.hpp \ + src/RunGui.hpp \ + src/singletons/TooltipPreviewImage.hpp \ + src/singletons/Badges.hpp \ + src/singletons/Emotes.hpp \ + src/singletons/helper/GifTimer.hpp \ + src/singletons/helper/LoggingChannel.hpp \ + src/singletons/Logging.hpp \ + src/singletons/NativeMessaging.hpp \ + src/singletons/Paths.hpp \ + src/singletons/Resources.hpp \ + src/singletons/Settings.hpp \ + src/singletons/Theme.hpp \ + src/singletons/Toasts.hpp \ + src/singletons/Updates.hpp \ + src/singletons/WindowManager.hpp \ + src/util/ConcurrentMap.hpp \ + src/util/DebugCount.hpp \ + src/util/FormatTime.hpp \ + src/util/IncognitoBrowser.hpp \ + src/util/InitUpdateButton.hpp \ + src/util/IrcHelpers.hpp \ + src/util/IsBigEndian.hpp \ + src/util/JsonQuery.hpp \ + src/util/LayoutCreator.hpp \ + src/util/QObjectRef.hpp \ + src/util/QStringHash.hpp \ + src/util/rangealgorithm.hpp \ + src/util/RapidjsonHelpers.hpp \ + src/util/RemoveScrollAreaBackground.hpp \ + src/util/SharedPtrElementLess.hpp \ + src/util/StandardItemHelper.hpp \ + src/util/StreamLink.hpp \ + src/widgets/AccountSwitchPopupWidget.hpp \ + src/widgets/AccountSwitchWidget.hpp \ + src/widgets/AttachedWindow.hpp \ + src/widgets/dialogs/EmotePopup.hpp \ + src/widgets/dialogs/LastRunCrashDialog.hpp \ + src/widgets/dialogs/LoginDialog.hpp \ + src/widgets/dialogs/LogsPopup.hpp \ + src/widgets/dialogs/NotificationPopup.hpp \ + src/widgets/dialogs/QualityPopup.hpp \ + src/widgets/dialogs/SelectChannelDialog.hpp \ + src/widgets/dialogs/SettingsDialog.hpp \ + src/widgets/dialogs/TextInputDialog.hpp \ + src/widgets/dialogs/UpdateDialog.hpp \ + src/widgets/dialogs/UserInfoPopup.hpp \ + src/widgets/dialogs/WelcomeDialog.hpp \ + src/widgets/helper/ChannelView.hpp \ + src/widgets/helper/ComboBoxItemDelegate.hpp \ + src/widgets/helper/CommonTexts.hpp \ + src/widgets/helper/DebugPopup.hpp \ + src/widgets/helper/EditableModelView.hpp \ + src/widgets/helper/Line.hpp \ + src/widgets/helper/NotebookButton.hpp \ + src/widgets/helper/NotebookTab.hpp \ + src/widgets/helper/ResizingTextEdit.hpp \ + src/widgets/helper/ScrollbarHighlight.hpp \ + src/widgets/helper/SearchPopup.hpp \ + src/widgets/helper/SettingsDialogTab.hpp \ + src/widgets/Notebook.hpp \ + src/widgets/Scrollbar.hpp \ + src/widgets/settingspages/AboutPage.hpp \ + src/widgets/settingspages/AccountsPage.hpp \ + src/widgets/settingspages/AdvancedPage.hpp \ + src/widgets/settingspages/BrowserExtensionPage.hpp \ + src/widgets/settingspages/CommandPage.hpp \ + src/widgets/settingspages/EmotesPage.hpp \ + src/widgets/settingspages/ExternalToolsPage.hpp \ + src/widgets/settingspages/FeelPage.hpp \ + src/widgets/settingspages/GeneralPage.hpp \ + src/widgets/settingspages/HighlightingPage.hpp \ + src/widgets/settingspages/IgnoresPage.hpp \ + src/widgets/settingspages/KeyboardSettingsPage.hpp \ + src/widgets/settingspages/LogsPage.hpp \ + src/widgets/settingspages/LookPage.hpp \ + src/widgets/settingspages/ModerationPage.hpp \ + src/widgets/settingspages/NotificationPage.hpp \ + src/widgets/settingspages/SettingsPage.hpp \ + src/widgets/settingspages/SpecialChannelsPage.hpp \ + src/widgets/splits/ClosedSplits.hpp \ + src/widgets/splits/Split.hpp \ + src/widgets/splits/SplitContainer.hpp \ + src/widgets/splits/SplitHeader.hpp \ + src/widgets/splits/SplitInput.hpp \ + src/widgets/splits/SplitOverlay.hpp \ + src/widgets/StreamView.hpp \ + src/widgets/Window.hpp \ + src/controllers/pings/PingController.hpp \ + src/controllers/pings/PingModel.hpp \ + src/util/SampleCheerMessages.hpp \ + +RESOURCES += \ + resources/resources.qrc \ + resources/resources_autogenerated.qrc + +DISTFILES += + +FORMS += + +# do not use windows min/max macros +#win32 { +# DEFINES += NOMINMAX +#} + +linux:isEmpty(PREFIX) { + message("Using default installation prefix (/usr/local). Change PREFIX in qmake command") + PREFIX = /usr/local +} + +linux { + desktop.files = resources/chatterino.desktop + desktop.path = $$PREFIX/share/applications + + build_icons.path = . + build_icons.commands = @echo $$PWD && mkdir -p $$PWD/resources/linuxinstall/icons/hicolor/256x256 && cp $$PWD/resources/icon.png $$PWD/resources/linuxinstall/icons/hicolor/256x256/chatterino.png + + icon.files = $$PWD/resources/linuxinstall/icons/hicolor/256x256/chatterino.png + icon.path = $$PREFIX/share/icons/hicolor/256x256/apps + + target.path = $$PREFIX/bin + + INSTALLS += desktop build_icons icon target +} + +git_commit=$$(GIT_COMMIT) +git_release=$$(GIT_RELEASE) +# Git data +isEmpty(git_commit) { +git_commit=$$system(git rev-parse HEAD) +} +isEmpty(git_release) { +git_release=$$system(git describe) +} +git_hash = $$str_member($$git_commit, 0, 8) + +# Passing strings as defines requires you to use this weird triple-escape then quotation mark syntax. +# https://stackoverflow.com/questions/3348711/add-a-define-to-qmake-with-a-value/18343449#18343449 +DEFINES += CHATTERINO_GIT_COMMIT=\\\"$$git_commit\\\" +DEFINES += CHATTERINO_GIT_RELEASE=\\\"$$git_release\\\" +DEFINES += CHATTERINO_GIT_HASH=\\\"$$git_hash\\\" \ No newline at end of file diff --git a/src/providers/twitch/TwitchChannel.cpp b/src/providers/twitch/TwitchChannel.cpp index a165981d7..1b84d11be 100644 --- a/src/providers/twitch/TwitchChannel.cpp +++ b/src/providers/twitch/TwitchChannel.cpp @@ -749,22 +749,23 @@ void TwitchChannel::refreshBadges() void TwitchChannel::refreshCheerEmotes() { - /*auto url = Url{"https://api.twitch.tv/kraken/bits/actions?channel_id=" + - this->getRoomId()}; - auto request = NetworkRequest::twitchRequest(url.string); - request.setCaller(QThread::currentThread()); - - request.onSuccess( - [this, weak = weakOf(this)](auto result) -> Outcome { + QString url("https://api.twitch.tv/kraken/bits/actions?channel_id=" + + this->roomId()); + NetworkRequest::twitchRequest(url) + .onSuccess([this, + weak = weakOf(this)](auto result) -> Outcome { auto cheerEmoteSets = ParseCheermoteSets(result.parseRapidJson()); std::vector emoteSets; - for (auto &set : cheerEmoteSets) { + for (auto &set : cheerEmoteSets) + { auto cheerEmoteSet = CheerEmoteSet(); cheerEmoteSet.regex = QRegularExpression( - "^" + set.prefix.toLower() + "([1-9][0-9]*)$"); + "^" + set.prefix + "([1-9][0-9]*)$", + QRegularExpression::CaseInsensitiveOption); - for (auto &tier : set.tiers) { + for (auto &tier : set.tiers) + { CheerEmote cheerEmote; cheerEmote.color = QColor(tier.color); @@ -797,7 +798,7 @@ void TwitchChannel::refreshCheerEmotes() std::sort(cheerEmoteSet.cheerEmotes.begin(), cheerEmoteSet.cheerEmotes.end(), [](const auto &lhs, const auto &rhs) { - return lhs.minBits < rhs.minBits; // + return lhs.minBits > rhs.minBits; }); emoteSets.emplace_back(cheerEmoteSet); @@ -805,10 +806,8 @@ void TwitchChannel::refreshCheerEmotes() *this->cheerEmoteSets_.access() = std::move(emoteSets); return Success; - }); - - request.execute(); - */ + }) + .execute(); } boost::optional TwitchChannel::twitchBadge( @@ -832,4 +831,32 @@ boost::optional TwitchChannel::ffzCustomModBadge() const return this->ffzCustomModBadge_.get(); } +boost::optional TwitchChannel::cheerEmote(const QString &string) +{ + auto sets = this->cheerEmoteSets_.access(); + for (const auto &set : *sets) + { + auto match = set.regex.match(string); + if (!match.hasMatch()) + { + continue; + } + QString amount = match.captured(1); + bool ok = false; + int bitAmount = amount.toInt(&ok); + if (!ok) + { + log("Error parsing bit amount in cheerEmote"); + } + for (const auto &emote : set.cheerEmotes) + { + if (bitAmount >= emote.minBits) + { + return emote; + } + } + } + return boost::none; +} + } // namespace chatterino diff --git a/src/providers/twitch/TwitchChannel.hpp b/src/providers/twitch/TwitchChannel.hpp index df54dee5f..c4da1309a 100644 --- a/src/providers/twitch/TwitchChannel.hpp +++ b/src/providers/twitch/TwitchChannel.hpp @@ -92,6 +92,9 @@ public: boost::optional twitchBadge(const QString &set, const QString &version) const; + // Cheers + boost::optional cheerEmote(const QString &string); + // Signals pajlada::Signals::NoArgSignal roomIdChanged; pajlada::Signals::NoArgSignal userStateChanged; diff --git a/src/providers/twitch/TwitchMessageBuilder.cpp b/src/providers/twitch/TwitchMessageBuilder.cpp index 805592275..6159f7563 100644 --- a/src/providers/twitch/TwitchMessageBuilder.cpp +++ b/src/providers/twitch/TwitchMessageBuilder.cpp @@ -274,7 +274,7 @@ MessagePtr TwitchMessageBuilder::build() if (iterator != this->tags.end()) { this->hasBits_ = true; - // bits = iterator.value().toString(); + this->bits = iterator.value().toString(); } // twitch emotes @@ -1285,56 +1285,29 @@ void TwitchMessageBuilder::appendChatterinoBadges() } } -Outcome TwitchMessageBuilder::tryParseCheermote(const QString & /*string*/) +Outcome TwitchMessageBuilder::tryParseCheermote(const QString &string) { - // auto app = getApp(); - //// Try to parse custom cheermotes - // const auto &channelResources = app->resources->channels[this->roomID_]; - // if (channelResources.loaded) { - // for (const auto &cheermoteSet : channelResources.cheermoteSets) { - // auto match = cheermoteSet.regex.match(string); - // if (!match.hasMatch()) { - // continue; - // } - // QString amount = match.captured(1); - // bool ok = false; - // int numBits = amount.toInt(&ok); - // if (!ok) { - // Log("Error parsing bit amount in tryParseCheermote"); - // return Failure; - // } - - // auto savedIt = cheermoteSet.cheermotes.end(); - - // // Fetch cheermote that matches our numBits - // for (auto it = cheermoteSet.cheermotes.begin(); it != - // cheermoteSet.cheermotes.end(); - // ++it) { - // if (numBits >= it->minBits) { - // savedIt = it; - // } else { - // break; - // } - // } - - // if (savedIt == cheermoteSet.cheermotes.end()) { - // Log("Error getting a cheermote from a cheermote set for the - // bit amount {}", - // numBits); - // return Failure; - // } - - // const auto &cheermote = *savedIt; - - // this->emplace(cheermote.animatedEmote, - // MessageElementFlag::BitsAnimated); - // this->emplace(amount, MessageElementFlag::Text, - // cheermote.color); - - // return Success; - // } - //} - - return Failure; + auto cheerOpt = this->twitchChannel->cheerEmote(string); + if (!cheerOpt) + { + return Failure; + } + auto &cheerEmote = *cheerOpt; + if (cheerEmote.staticEmote) + { + this->emplace(cheerEmote.staticEmote, + MessageElementFlag::BitsStatic); + } + if (cheerEmote.animatedEmote) + { + this->emplace(cheerEmote.animatedEmote, + MessageElementFlag::BitsAnimated); + } + if (cheerEmote.color != QColor()) + { + this->emplace(this->bits, MessageElementFlag::BitsAmount, + cheerEmote.color); + } + return Success; } } // namespace chatterino diff --git a/src/providers/twitch/TwitchMessageBuilder.hpp b/src/providers/twitch/TwitchMessageBuilder.hpp index 98552d1cf..c43c14195 100644 --- a/src/providers/twitch/TwitchMessageBuilder.hpp +++ b/src/providers/twitch/TwitchMessageBuilder.hpp @@ -78,6 +78,7 @@ private: QString roomID_; bool hasBits_ = false; + QString bits; bool historicalMessage_ = false; QString userId_; diff --git a/src/util/SampleCheerMessages.hpp b/src/util/SampleCheerMessages.hpp new file mode 100644 index 000000000..7e3471e53 --- /dev/null +++ b/src/util/SampleCheerMessages.hpp @@ -0,0 +1,64 @@ +#pragma once + +namespace chatterino { + +std::vector getSampleCheerMessage() +{ + // clang-format off +std::vector cheerMessageVector; +cheerMessageVector.push_back(R"(@badge-info=subscriber/4;badges=moderator/1,subscriber/3,sub-gifter/5;bits=2;color=#FF0000;display-name=69_faith_420;emotes=;flags=;id=c5fd49c7-ecbc-46dd-a790-c9f10fdaaa67;mod=1;room-id=111448817;subscriber=1;tmi-sent-ts=1567282184553;turbo=0;user-id=125608098;user-type=mod :69_faith_420!69_faith_420@69_faith_420.tmi.twitch.tv PRIVMSG #pajlada :cheer2 Stop what? I'm not doing anything.)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/4;badges=moderator/1,subscriber/3,sub-gifter/5;bits=2;color=#FF0000;display-name=69_faith_420;emotes=;flags=;id=397f4d2e-cac8-4689-922a-32709b9e8b4f;mod=1;room-id=111448817;subscriber=1;tmi-sent-ts=1567282159076;turbo=0;user-id=125608098;user-type=mod :69_faith_420!69_faith_420@69_faith_420.tmi.twitch.tv PRIVMSG #pajlada :cheer2 Who keeps getting their bits out now?)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/1;badges=subscriber/0,bits/1;bits=2;color=#FF0000;display-name=FlameGodFlann;emotes=;flags=;id=664ddc92-649d-4889-9641-208a6e62ef1e;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567282066199;turbo=0;user-id=56442185;user-type= :flamegodflann!flamegodflann@flamegodflann.tmi.twitch.tv PRIVMSG #pajlada :Cheer2 I'm saving my only can of Stella for your upcoming win, lets go!)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/3;badges=moderator/1,subscriber/3,bits/100;bits=10;color=#008000;display-name=k4izn;emotes=;flags=;id=3919af0b-93e0-412c-b238-d152f92ffea7;mod=1;room-id=111448817;subscriber=1;tmi-sent-ts=1567811485257;turbo=0;user-id=207114672;user-type=mod :k4izn!k4izn@k4izn.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Kleiner Cheer(s) !)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/12;badges=subscriber/12,bits/1000;bits=20;color=#00CCFF;display-name=YaBoiBurnsy;emotes=;flags=;id=5b53975d-b339-484f-a2a0-3ffbedde0df2;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567529634584;turbo=0;user-id=45258137;user-type= :yaboiburnsy!yaboiburnsy@yaboiburnsy.tmi.twitch.tv PRIVMSG #pajlada :ShowLove20)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/1;badges=moderator/1,subscriber/0,bits-leader/2;bits=1;color=;display-name=jdfellie;emotes=;flags=18-22:A.3/P.5;id=28c8f4b7-b1e3-4404-b0f8-5cfe46411ef9;mod=1;room-id=111448817;subscriber=1;tmi-sent-ts=1567668177856;turbo=0;user-id=137619637;user-type=mod :jdfellie!jdfellie@jdfellie.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 take a bit bitch)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/2;bits=30;color=#EC3B83;display-name=Sammay;emotes=;flags=;id=ccf058a6-c1f1-45de-a764-fc8f96f21449;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1566719874294;turbo=0;user-id=58283830;user-type= :sammay!sammay@sammay.tmi.twitch.tv PRIVMSG #pajlada :ShowLove30 @Emperor_Zhang)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/2;bits=6;color=#97E7FF;display-name=Emperor_Zhang;emotes=;flags=;id=53bab01b-9f6c-4123-a852-9916ab371cf9;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1566719803345;turbo=0;user-id=105292882;user-type= :emperor_zhang!emperor_zhang@emperor_zhang.tmi.twitch.tv PRIVMSG #pajlada :uni6)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=5;color=#97E7FF;display-name=Emperor_Zhang;emotes=;flags=;id=545caec6-8b5f-460a-8b4b-3e407e179689;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1566704926380;turbo=0;user-id=105292882;user-type= :emperor_zhang!emperor_zhang@emperor_zhang.tmi.twitch.tv PRIVMSG #pajlada :VoHiYo5)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/100;bits=50;color=;display-name=Schmiddi55;emotes=;flags=;id=777f1018-941d-48aa-bf4e-ed8053d556c8;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567708393343;turbo=0;user-id=101444120;user-type= :schmiddi55!schmiddi55@schmiddi55.tmi.twitch.tv PRIVMSG #pajlada :cheer50 sere ihr radlertrinker)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/3;badges=subscriber/3,sub-gifter/10;bits=100;color=#0000FF;display-name=MLPTheChad;emotes=;flags=87-91:P.5;id=ed7db31e-884b-4761-9c88-b1676caa8814;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567681752733;turbo=0;user-id=63179867;user-type= :mlpthechad!mlpthechad@mlpthechad.tmi.twitch.tv PRIVMSG #pajlada :Subway100 bonus10 Statistically speaking, 10 out of 10 constipated people don't give a shit.)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/3;badges=subscriber/3,sub-gifter/10;bits=100;color=#0000FF;display-name=MLPTheChad;emotes=;flags=;id=506b482a-515a-4914-a694-2c69d2add23a;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567681618814;turbo=0;user-id=63179867;user-type= :mlpthechad!mlpthechad@mlpthechad.tmi.twitch.tv PRIVMSG #pajlada :Subway100 bonus10 That's some SUB par gameplay, Dabier.)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=premium/1;bits=100;color=;display-name=AkiraKurusu__;emotes=;flags=;id=6e343f5d-0e0e-47f7-bf6d-d5d7bf18b95a;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567765732657;turbo=0;user-id=151679027;user-type= :akirakurusu__!akirakurusu__@akirakurusu__.tmi.twitch.tv PRIVMSG #pajlada :TriHard100)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=premium/1;bits=1;color=;display-name=AkiraKurusu__;emotes=;flags=;id=dfdf6c2f-abee-4a4b-99fe-0d0b221f07de;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567765295301;turbo=0;user-id=151679027;user-type= :akirakurusu__!akirakurusu__@akirakurusu__.tmi.twitch.tv PRIVMSG #pajlada :TriHard1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/100;bits=500;color=#0000FF;display-name=Stabbr;emotes=;flags=;id=e28b384e-fb6a-4da5-9a36-1b6153c6089d;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567648284623;turbo=0;user-id=183081176;user-type= :stabbr!stabbr@stabbr.tmi.twitch.tv PRIVMSG #pajlada :cheer500 Gotta be on top)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/1;badges=subscriber/0,bits-leader/1;bits=100;color=;display-name=dbf_sub;emotes=;flags=;id=7cf317b8-6e28-4615-a0ba-e0bbaa0d4b29;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567646349560;turbo=0;user-id=450101746;user-type= :dbf_sub!dbf_sub@dbf_sub.tmi.twitch.tv PRIVMSG #pajlada :EleGiggle100)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/1;badges=subscriber/0,bits/1;bits=1;color=;display-name=dbf_sub;emotes=;flags=;id=43b5fc97-e7cc-4ac1-8d7e-7504c435c3f1;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567643510222;turbo=0;user-id=450101746;user-type= :dbf_sub!dbf_sub@dbf_sub.tmi.twitch.tv PRIVMSG #pajlada :SeemsGood1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/2;bits=100;color=;display-name=RobertsonRobotics;emotes=;flags=;id=598dfa14-23e9-4e45-a2fe-7a0263828817;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567873463820;turbo=0;user-id=117177721;user-type= :robertsonrobotics!robertsonrobotics@robertsonrobotics.tmi.twitch.tv PRIVMSG #pajlada :firstCheer100 This is so cool! Can’t wait for the competition!)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/100;bits=18;color=#1E90FF;display-name=Vipacman11;emotes=;flags=;id=07f59664-0c75-459e-b137-26c8d03e44be;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567873210379;turbo=0;user-id=89634839;user-type= :vipacman11!vipacman11@vipacman11.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=sub-gifter/5;bits=100;color=#FF7F50;display-name=darkside_sinner;emotes=;flags=;id=090102b3-369d-4ce4-ad1f-283849b10de0;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567822075293;turbo=0;user-id=104942909;user-type= :darkside_sinner!darkside_sinner@darkside_sinner.tmi.twitch.tv PRIVMSG #pajlada :Subway100 bonus10)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=sub-gifter/5;bits=200;color=#FF7F50;display-name=darkside_sinner;emotes=;flags=;id=2bdf7846-5ffa-4798-a397-997e7209a6d0;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567821695287;turbo=0;user-id=104942909;user-type= :darkside_sinner!darkside_sinner@darkside_sinner.tmi.twitch.tv PRIVMSG #pajlada :Subway200 bonus20)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=50;color=#0000FF;display-name=SincereBC;emotes=;flags=;id=b8c9236b-aeb9-4c72-a191-593e33c6c3f1;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567818308913;turbo=0;user-id=146097597;user-type= :sincerebc!sincerebc@sincerebc.tmi.twitch.tv PRIVMSG #pajlada :cheer50)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=1;color=#FF0000;display-name=AngryCh33s3puff;emotes=;flags=;id=6ab62185-ac1b-4ee5-bd93-165009917078;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567474810480;turbo=0;user-id=55399500;user-type= :angrych33s3puff!angrych33s3puff@angrych33s3puff.tmi.twitch.tv PRIVMSG #pajlada :cheer1 for the chair!)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/3;badges=moderator/1,subscriber/0,bits/1000;bits=1500;color=#5F9EA0;display-name=LaurenJW28;emotes=;flags=;id=2403678c-6109-43ac-b3b5-1f5230f91729;mod=1;room-id=111448817;subscriber=1;tmi-sent-ts=1567746107991;turbo=0;user-id=244354979;user-type=mod :laurenjw28!laurenjw28@laurenjw28.tmi.twitch.tv PRIVMSG #pajlada :Cheer1000 Cheer100 Cheer100 Cheer100 Cheer100 Cheer100)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=5;color=#5F9EA0;display-name=drkwings;emotes=;flags=;id=ad45dae5-b985-4526-9b9e-0bdba2d23289;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567742106689;turbo=0;user-id=440230526;user-type= :drkwings!drkwings@drkwings.tmi.twitch.tv PRIVMSG #pajlada :SeemsGood1 SeemsGood1 SeemsGood1 SeemsGood1 SeemsGood1)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/16;badges=subscriber/12,bits/1000;bits=1;color=;display-name=mustangbugatti;emotes=;flags=;id=ee987ee9-46a4-4c06-bf66-2cafff5d4cdd;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567883658780;turbo=0;user-id=115948494;user-type= :mustangbugatti!mustangbugatti@mustangbugatti.tmi.twitch.tv PRIVMSG #pajlada :(In clarkson accent) Some say...the only number in his contacts is himself..... And...that he is the international butt-dial champion... All we know is.... HES CALLED THE STIG Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/2;badges=subscriber/0,bits/1000;bits=1;color=;display-name=derpysaurus1;emotes=;flags=;id=c41c3d8b-c591-4db0-87e7-a78c5536de82;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567883655116;turbo=0;user-id=419221818;user-type= :derpysaurus1!derpysaurus1@derpysaurus1.tmi.twitch.tv PRIVMSG #pajlada :cheer1 OMG ur back yaaaaaaaaaaaaaaaaaaaaayyyyyyyyy)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/5;badges=subscriber/0,premium/1;bits=1;color=#8A2BE2;display-name=sirlordstallion;emotes=;flags=;id=61a87aeb-88b1-42f9-90f5-74429d8bf387;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567882978939;turbo=0;user-id=92145441;user-type= :sirlordstallion!sirlordstallion@sirlordstallion.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Alex is definetly not putting his eggs in Narreths basket)"); +cheerMessageVector.push_back(R"(@badge-info=subscriber/1;badges=subscriber/0,bits/1;bits=1;color=;display-name=xplosivegingerx;emotes=;flags=;id=f8aac1e0-050a-44bf-abcc-c0cf12cbedfc;mod=0;room-id=111448817;subscriber=1;tmi-sent-ts=1567882249072;turbo=0;user-id=151265906;user-type= :xplosivegingerx!xplosivegingerx@xplosivegingerx.tmi.twitch.tv PRIVMSG #pajlada :Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/100;bits=500;color=;display-name=AlexJohanning;emotes=;flags=;id=4e4229a3-e7f2-4082-8c55-47d42db3b09c;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567881969862;turbo=0;user-id=190390930;user-type= :alexjohanning!alexjohanning@alexjohanning.tmi.twitch.tv PRIVMSG #pajlada :cheer500)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=245;color=;display-name=undonebunion6;emotes=;flags=;id=331ec583-0a80-4299-9206-0efd9e33d934;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567881553759;turbo=0;user-id=452974274;user-type= :undonebunion6!undonebunion6@undonebunion6.tmi.twitch.tv PRIVMSG #pajlada :cheer245 can I join?)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/100;bits=100;color=;display-name=therealruffnix;emotes=;flags=61-67:S.6;id=25f567ad-ac95-45ab-b12e-4d647f6a2345;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567524218162;turbo=0;user-id=55059620;user-type= :therealruffnix!therealruffnix@therealruffnix.tmi.twitch.tv PRIVMSG #pajlada :cheer100 This is the kind of ASMR I'm missing on YouTube and PornHub)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=1;color=;display-name=BeamMeUpSnotty;emotes=;flags=;id=8022f41f-dcb8-42f2-b46a-04d4a99180bd;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567270037926;turbo=0;user-id=261679182;user-type= :beammeupsnotty!beammeupsnotty@beammeupsnotty.tmi.twitch.tv PRIVMSG #pajlada :SeemsGood1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=10;color=#00FF7F;display-name=EXDE_HUN;emotes=;flags=;id=60d8835b-23fa-418c-96ca-5874e5d5e8ba;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1566654664248;turbo=0;user-id=129793695;user-type= :exde_hun!exde_hun@exde_hun.tmi.twitch.tv PRIVMSG #pajlada :PogChamp10)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/3;bits=5;color=;display-name=slyckity;emotes=;flags=;id=fd6c5507-3a4e-4d24-8f6e-fadf07f520d3;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567824273752;turbo=0;user-id=143114011;user-type= :slyckity!slyckity@slyckity.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Cheer1 Cheer1 Cheer1 Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/3;bits=5;color=;display-name=slyckity;emotes=;flags=;id=7003f119-b9a6-4319-a1e8-8e99f96ab01a;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567824186437;turbo=0;user-id=143114011;user-type= :slyckity!slyckity@slyckity.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Cheer1 Cheer1 Cheer1 Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/3;bits=10;color=;display-name=slyckity;emotes=;flags=;id=3f7de686-77f6-46d2-919e-404312c6676f;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567824128736;turbo=0;user-id=143114011;user-type= :slyckity!slyckity@slyckity.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/3;bits=10;color=;display-name=slyckity;emotes=;flags=;id=9e830ed3-8735-4ccb-9a8b-80466598ca19;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567824118921;turbo=0;user-id=143114011;user-type= :slyckity!slyckity@slyckity.tmi.twitch.tv PRIVMSG #pajlada :Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1 Cheer1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=377;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=262f4d54-9b21-4f13-aac3-6d3b1051282f;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440897074;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :NotLikeThis377)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=144;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=3556e0ad-b5f8-4190-9c4c-e39c1940d191;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440861545;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :bday144)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=89;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=96e380a5-786d-44b8-819a-529b6adb06ac;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440848361;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :SwiftRage89)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=34;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=76239011-65fa-4f6a-a6d6-dc5d5dcbd674;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440816630;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :MrDestructoid34)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=21;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=4c05c97c-7b6c-4ae9-bc91-04e98240c1d5;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440806389;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :TriHard21)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=8;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=3b2ecce7-842e-429e-b6c8-9456c4646362;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440774009;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :EleGiggle8)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=5;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=3b8736d1-832d-4152-832a-50c526714fd1;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440762580;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :uni5)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=3;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=c13a1540-2a03-4c7d-af50-cb20ed88cefd;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440750103;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :Party3)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/1;bits=2;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=5d889eeb-b6b9-4a4e-91ff-0aecdf297edd;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440738337;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :ShowLove2)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=1;color=#00FF7F;display-name=Baekjoon;emotes=;flags=;id=da47f91a-40d3-4209-ba1c-0219d8b8ecaf;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567440720363;turbo=0;user-id=73587716;user-type= :baekjoon!baekjoon@baekjoon.tmi.twitch.tv PRIVMSG #pajlada :Scoops1)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits/1;bits=10;color=#8A2BE2;display-name=EkimSky;emotes=;flags=;id=8adea5b4-7430-44ea-a666-5ebaceb69441;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567833047623;turbo=0;user-id=42132818;user-type= :ekimsky!ekimsky@ekimsky.tmi.twitch.tv PRIVMSG #pajlada :Hi Cheer10)"); +cheerMessageVector.push_back(R"(@badge-info=;badges=bits-leader/2;bits=500;color=;display-name=godkiller76;emotes=;flags=;id=80e86bcc-d048-44f3-8073-9a1014568e0c;mod=0;room-id=111448817;subscriber=0;tmi-sent-ts=1567753685704;turbo=0;user-id=258838478;user-type= :godkiller76!godkiller76@godkiller76.tmi.twitch.tv PRIVMSG #pajlada :Party100 Party100 Party100 Party100 Party100)"); + +return cheerMessageVector; + // clang-format on +}; + +} // namespace chatterino diff --git a/src/widgets/Window.cpp b/src/widgets/Window.cpp index a5bc714d3..7893783a4 100644 --- a/src/widgets/Window.cpp +++ b/src/widgets/Window.cpp @@ -22,6 +22,10 @@ #include "widgets/splits/Split.hpp" #include "widgets/splits/SplitContainer.hpp" +#ifdef QT_DEBUG +# include "util/SampleCheerMessages.hpp" +#endif + #include #include #include @@ -204,16 +208,9 @@ void Window::addDebugStuff() { #ifdef QT_DEBUG std::vector cheerMessages, subMessages, miscMessages; + + cheerMessages = getSampleCheerMessage(); // clang-format off - cheerMessages.emplace_back(R"(@badges=subscriber/12,premium/1;bits=2000;color=#B22222;display-name=arzenhuz;emotes=185989:33-37;id=1ae336ac-8e1a-4d6b-8b00-9fcee26e8337;mod=0;room-id=11148817;subscriber=1;tmi-sent-ts=1515783470139;turbo=0;user-id=111553331;user-type= :arzenhuz!arzenhuz@arzenhuz.tmi.twitch.tv PRIVMSG #pajlada :pajacheer2000 Buy pizza for both pajaH)"); - cheerMessages.emplace_back(R"(@badges=subscriber/12,premium/1;bits=37;color=#3FBF72;display-name=VADIKUS007;emotes=;id=eedd95fd-2a17-4da1-879c-a1e76ffce582;mod=0;room-id=11148817;subscriber=1;tmi-sent-ts=1515783184352;turbo=0;user-id=72256775;user-type= :vadikus007!vadikus007@vadikus007.tmi.twitch.tv PRIVMSG #pajlada :cheer37)"); - cheerMessages.emplace_back(R"(@badges=moderator/1,subscriber/24,bits/100;bits=1;color=#DCD3E6;display-name=swiftapples;emotes=80803:7-13;id=1c4647f6-f1a8-4acc-a9b2-b5d23d91258d;mod=1;room-id=11148817;subscriber=1;tmi-sent-ts=1515538318854;turbo=0;user-id=80526177;user-type=mod :swiftapples!swiftapples@swiftapples.tmi.twitch.tv PRIVMSG #pajlada :cheer1 pajaHey)"); - cheerMessages.emplace_back(R"(@badges=subscriber/12,turbo/1;bits=1;color=#0A2927;display-name=Binkelderk;emotes=;id=a1d9bdc6-6f6a-4c03-8554-d5b34721a878;mod=0;room-id=11148817;subscriber=1;tmi-sent-ts=1515538899479;turbo=1;user-id=89081828;user-type= :binkelderk!binkelderk@binkelderk.tmi.twitch.tv PRIVMSG #pajlada :pajacheer1)"); - cheerMessages.emplace_back(R"(@badges=moderator/1,subscriber/24,bits/100;bits=1;color=#DCD3E6;display-name=swiftapples;emotes=80803:6-12;id=e9e21793-0b58-4ac6-8a1e-c19e165dbc9f;mod=1;room-id=11148817;subscriber=1;tmi-sent-ts=1515539073209;turbo=0;user-id=80526177;user-type=mod :swiftapples!swiftapples@swiftapples.tmi.twitch.tv PRIVMSG #pajlada :bday1 pajaHey)"); - cheerMessages.emplace_back(R"(@badges=partner/1;bits=1;color=#CC44FF;display-name=pajlada;emotes=;id=ca89214e-4fb5-48ec-853e-d2e6b41355ea;mod=0;room-id=39705480;subscriber=0;tmi-sent-ts=1515546977622;turbo=0;user-id=11148817;user-type= :pajlada!pajlada@pajlada.tmi.twitch.tv PRIVMSG #leesherwhy :test123 owocheer1 456test)"); - cheerMessages.emplace_back(R"(@badges=subscriber/12,premium/1;bits=1;color=#3FBF72;display-name=VADIKUS007;emotes=;id=c4c5061b-f5c6-464b-8bff-7f1ac816caa7;mod=0;room-id=11148817;subscriber=1;tmi-sent-ts=1515782817171;turbo=0;user-id=72256775;user-type= :vadikus007!vadikus007@vadikus007.tmi.twitch.tv PRIVMSG #pajlada :trihard1)"); - cheerMessages.emplace_back(R"(@badges=;bits=1;color=#FF0000;display-name=?????;emotes=;id=979b6b4f-be9a-42fb-a54c-88fcb0aca18d;mod=0;room-id=11148817;subscriber=0;tmi-sent-ts=1515782819084;turbo=0;user-id=70656218;user-type= :stels_tv!stels_tv@stels_tv.tmi.twitch.tv PRIVMSG #pajlada :trihard1)"); - cheerMessages.emplace_back(R"(@badges=subscriber/3,premium/1;bits=1;color=#FF0000;display-name=kalvarenga;emotes=;id=4744d6f0-de1d-475d-a3ff-38647113265a;mod=0;room-id=11148817;subscriber=1;tmi-sent-ts=1515782860740;turbo=0;user-id=108393131;user-type= :kalvarenga!kalvarenga@kalvarenga.tmi.twitch.tv PRIVMSG #pajlada :trihard1)"); subMessages.emplace_back(R"(@badges=staff/1,broadcaster/1,turbo/1;color=#008000;display-name=ronni;emotes=;id=db25007f-7a18-43eb-9379-80131e44d633;login=ronni;mod=0;msg-id=resub;msg-param-months=6;msg-param-sub-plan=Prime;msg-param-sub-plan-name=Prime;room-id=1337;subscriber=1;system-msg=ronni\shas\ssubscribed\sfor\s6\smonths!;tmi-sent-ts=1507246572675;turbo=1;user-id=1337;user-type=staff :tmi.twitch.tv USERNOTICE #pajlada :Great stream -- keep it up!)"); subMessages.emplace_back(R"(@badges=staff/1,premium/1;color=#0000FF;display-name=TWW2;emotes=;id=e9176cd8-5e22-4684-ad40-ce53c2561c5e;login=tww2;mod=0;msg-id=subgift;msg-param-months=1;msg-param-recipient-display-name=Mr_Woodchuck;msg-param-recipient-id=89614178;msg-param-recipient-name=mr_woodchuck;msg-param-sub-plan-name=House\sof\sNyoro~n;msg-param-sub-plan=1000;room-id=19571752;subscriber=0;system-msg=TWW2\sgifted\sa\sTier\s1\ssub\sto\sMr_Woodchuck!;tmi-sent-ts=1521159445153;turbo=0;user-id=13405587;user-type=staff :tmi.twitch.tv USERNOTICE #pajlada)"); @@ -251,11 +248,19 @@ void Window::addDebugStuff() app->twitch.server->addFakeMessage(msg); }); + createWindowShortcut(this, "F7", [=] { + const auto &messages = cheerMessages; + static int index = 0; + const auto &msg = messages[index++ % messages.size()]; + getApp()->twitch.server->addFakeMessage(msg); + }); + createWindowShortcut(this, "F9", [=] { auto *dialog = new WelcomeDialog(); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); }); + #endif }