X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fcomponents%2Ftwitch-bot%2FControls.js;h=3093d90c04dd34e8b4f050367efa4c5c16f219b6;hb=1f91cd54bca46f686aaed871c9a7a7d000179ee0;hp=0aea916cf04d698a879bc6bed886a88ebb426e08;hpb=e10222af705e3475fcea6e0b17d1c9984a62db26;p=alttp.git
diff --git a/resources/js/components/twitch-bot/Controls.js b/resources/js/components/twitch-bot/Controls.js
index 0aea916..3093d90 100644
--- a/resources/js/components/twitch-bot/Controls.js
+++ b/resources/js/components/twitch-bot/Controls.js
@@ -1,20 +1,41 @@
import axios from 'axios';
import React from 'react';
-import { Alert, Col, Form, Row } from 'react-bootstrap';
+import { Alert, Button, Col, Form, Row } from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
import toastr from 'toastr';
+import ChatSettingsForm from './ChatSettingsForm';
+import CommandDialog from './CommandDialog';
+import Commands from './Commands';
+import GuessingSettingsForm from './GuessingSettingsForm';
import ChannelSelect from '../common/ChannelSelect';
+import Icon from '../common/Icon';
import ToggleSwitch from '../common/ToggleSwitch';
const Controls = () => {
const [channel, setChannel] = React.useState(null);
+ const [chatText, setChatText] = React.useState('');
+ const [editCommand, setEditCommand] = React.useState('');
+ const [editCommandSettings, setEditCommandSettings] = React.useState({});
+ const [showCommandDialog, setShowCommandDialog] = React.useState(false);
const { t } = useTranslation();
- const join = React.useCallback(async () => {
+ const chat = React.useCallback(async (text, bot_nick) => {
try {
- const rsp = await axios.post(`/api/channels/${channel.id}/join`);
+ await axios.post(`/api/channels/${channel.id}/chat`, {
+ text,
+ bot_nick,
+ });
+ toastr.success(t('twitchBot.chatSuccess'));
+ } catch (e) {
+ toastr.error(t('twitchBot.chatError'));
+ }
+ }, [channel, chatText, t]);
+
+ const join = React.useCallback(async (bot_nick) => {
+ try {
+ const rsp = await axios.post(`/api/channels/${channel.id}/join`, { bot_nick });
setChannel(rsp.data);
toastr.success(t('twitchBot.joinSuccess'));
} catch (e) {
@@ -22,9 +43,9 @@ const Controls = () => {
}
}, [channel, t]);
- const part = React.useCallback(async () => {
+ const part = React.useCallback(async (bot_nick) => {
try {
- const rsp = await axios.post(`/api/channels/${channel.id}/part`);
+ const rsp = await axios.post(`/api/channels/${channel.id}/part`, { bot_nick });
setChannel(rsp.data);
toastr.success(t('twitchBot.partSuccess'));
} catch (e) {
@@ -32,39 +53,218 @@ const Controls = () => {
}
}, [channel, t]);
+ const saveChatSettings = React.useCallback(async (values) => {
+ try {
+ const rsp = await axios.post(`/api/channels/${channel.id}/chat-settings`, values);
+ setChannel(rsp.data);
+ toastr.success(t('twitchBot.saveSuccess'));
+ } catch (e) {
+ toastr.error(t('twitchBot.saveError'));
+ }
+ }, [channel, t]);
+
+ const onAddCommand = React.useCallback(() => {
+ setEditCommand('');
+ setEditCommandSettings({});
+ setShowCommandDialog(true);
+ }, [channel]);
+
+ const onEditCommand = React.useCallback((name, settings) => {
+ setEditCommand(name);
+ setEditCommandSettings(settings);
+ setShowCommandDialog(true);
+ }, [channel]);
+
+ const onRemoveCommand = React.useCallback(async (name) => {
+ try {
+ const rsp = await axios.delete(`/api/channels/${channel.id}/commands/${name}`);
+ setChannel(rsp.data);
+ toastr.success(t('twitchBot.saveSuccess'));
+ } catch (e) {
+ toastr.error(t('twitchBot.saveError'));
+ }
+ }, [channel]);
+
+ const saveCommand = React.useCallback(async (values) => {
+ try {
+ const rsp = await axios.put(
+ `/api/channels/${channel.id}/commands/${values.name}`,
+ values,
+ );
+ setChannel(rsp.data);
+ setShowCommandDialog(false);
+ setEditCommand('');
+ setEditCommandSettings({});
+ toastr.success(t('twitchBot.saveSuccess'));
+ } catch (e) {
+ toastr.error(t('twitchBot.saveError'));
+ throw e;
+ }
+ }, [channel]);
+
+ const saveGuessingGame = React.useCallback(async (values) => {
+ try {
+ const rsp = await axios.put(
+ `/api/channels/${channel.id}/guessing-game/${values.name}`,
+ values,
+ );
+ setChannel(rsp.data);
+ toastr.success(t('twitchBot.saveSuccess'));
+ } catch (e) {
+ toastr.error(t('twitchBot.saveError'));
+ throw e;
+ }
+ }, [channel]);
+
return <>