]> git.localhorst.tv Git - alttp.git/commitdiff
configurable min age and message source
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 7 May 2024 13:10:01 +0000 (15:10 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 7 May 2024 13:10:01 +0000 (15:10 +0200)
app/Http/Controllers/ChannelController.php
app/Models/Channel.php
resources/js/components/twitch-bot/ChatSettingsForm.js
resources/js/i18n/de.js
resources/js/i18n/en.js

index f9cf0d27f50aa3e020fb413aa5428aad2fc8a3e8..026b9aa8ce9fe18c7d0978be820fc1e911c12018 100644 (file)
@@ -84,9 +84,11 @@ class ChannelController extends Controller {
                }
                $validatedData = $request->validate([
                        'language' => 'string|in:de,en,es,fr',
+                       'min_age' => 'integer|min:1',
                        'respond' => 'string|in:50,no,yes',
+                       'source' => 'string|in:any,cat,catchan,chan',
                        'wait_msgs_min' => 'integer|min:1',
-                       'wait_msgs_max' => 'integer',
+                       'wait_msgs_max' => 'integer|min:1',
                        'wait_time_min' => 'integer',
                        'wait_time_max' => 'integer',
                ]);
index 8045a4194fa529561ba6a091c0aa7770beb18dce..c6dfb6aaa19b57a019b51dba4f4167b49382e094 100644 (file)
@@ -43,14 +43,23 @@ class Channel extends Model {
        }
 
        public function queryChatlog() {
-               return ChatLog::where('type', '=', 'chat')
+               $min_age = $this->getChatSetting('min_age', 1);
+               $query = ChatLog::where('type', '=', 'chat')
                        ->where('banned', '=', false)
-                       ->where('created_at', '<', now()->sub(1, 'day'))
+                       ->where('created_at', '<', now()->sub($min_age, 'day'))
                        ->where(function ($query) {
                                $query->whereNull('detected_language');
                                $query->orWhereIn('detected_language', $this->getPreferredLanguages());
                        })
                        ->inRandomOrder();
+               $source = $this->getChatSetting('source', 'any');
+               if (in_array($source, ['catchan', 'chan'])) {
+                       $query->where('channel_id', $this->id);
+               }
+               if (in_array($source, ['cat', 'catchan'])) {
+                       $query->where('twitch_category', $this->twitch_category);
+               }
+               return $query;
        }
 
        public function getPreferredLanguages() {
index 4d36a31601ee3d19e55be0ce8c0e8c8b68a42daa..9f6a1836afcc67a6e355276170ac05764331cdc6 100644 (file)
@@ -127,6 +127,39 @@ const ChatSettingsForm = ({
                                        </Form.Control.Feedback>
                                : null}
                        </Form.Group>
+                       <Form.Group as={Col} md={6} controlId="chatSettings.min_age">
+                               <Form.Label>{t('twitchBot.chatMinAge')}</Form.Label>
+                               <Form.Control
+                                       isInvalid={!!(touched.min_age && errors.min_age)}
+                                       name="min_age"
+                                       min="1"
+                                       onBlur={handleBlur}
+                                       onChange={handleChange}
+                                       type="number"
+                                       value={values.min_age || 1}
+                               />
+                       </Form.Group>
+                       <Form.Group as={Col} md={6} controlId="chatSettings.source">
+                               <Form.Label>{t('twitchBot.chatSource')}</Form.Label>
+                               <Form.Select
+                                       isInvalid={!!(touched.source && errors.source)}
+                                       name="source"
+                                       onBlur={handleBlur}
+                                       onChange={handleChange}
+                                       value={values.source || 'any'}
+                               >
+                                       {['any', 'cat', 'chan', 'catchan'].map(value =>
+                                               <option key={value} value={value}>
+                                                       {t(`twitchBot.chatSources.${value}`)}
+                                               </option>
+                                       )}
+                               </Form.Select>
+                               {touched.respond && errors.respond ?
+                                       <Form.Control.Feedback type="invalid">
+                                               {t(errors.respond)}
+                                       </Form.Control.Feedback>
+                               : null}
+                       </Form.Group>
                </Row>
                <div className="button-bar mt-3">
                        <Button disabled={!dirty || isSubmitting} type="submit" variant="primary">
@@ -140,7 +173,9 @@ ChatSettingsForm.propTypes = {
        dirty: PropTypes.bool,
        errors: PropTypes.shape({
                language: PropTypes.string,
+               min_age: PropTypes.string,
                respond: PropTypes.string,
+               source: PropTypes.string,
                wait_msgs_max: PropTypes.string,
                wait_msgs_min: PropTypes.string,
                wait_time_min: PropTypes.string,
@@ -152,7 +187,9 @@ ChatSettingsForm.propTypes = {
        isSubmitting: PropTypes.bool,
        touched: PropTypes.shape({
                language: PropTypes.bool,
+               min_age: PropTypes.bool,
                respond: PropTypes.bool,
+               source: PropTypes.bool,
                wait_msgs_max: PropTypes.bool,
                wait_msgs_min: PropTypes.bool,
                wait_time_min: PropTypes.bool,
@@ -160,7 +197,9 @@ ChatSettingsForm.propTypes = {
        }),
        values: PropTypes.shape({
                language: PropTypes.string,
+               min_age: PropTypes.number,
                respond: PropTypes.string,
+               source: PropTypes.string,
                wait_msgs_max: PropTypes.number,
                wait_msgs_min: PropTypes.number,
                wait_time_min: PropTypes.string,
@@ -181,7 +220,9 @@ export default withFormik({
        },
        mapPropsToValues: ({ channel }) => ({
                language: channel.chat_settings.language || channel.languages[0] || 'de',
+               min_age: channel.chat_settings.min_age || 1,
                respond: channel.chat_settings.respond || 'yes',
+               source: channel.chat_settings.source || 'any',
                wait_msgs_min: channel.chat_settings.wait_msgs_min || 1,
                wait_msgs_max: channel.chat_settings.wait_msgs_max || 10,
                wait_time_min: channel.chat_settings.wait_time_min
@@ -191,6 +232,7 @@ export default withFormik({
        }),
        validationSchema: yup.object().shape({
                language: yup.string(),
+               min_age: yup.number().min(1),
                respond: yup.string(),
                wait_msgs_min: yup.number().min(1),
                wait_msgs_max: yup.number().min(1),
index dcf4d21bdea0ddd9885bc5cd893e0ec9f030147f..85d8fcbde346993bf66f2232db621e0c1e7c5aec 100644 (file)
@@ -719,7 +719,15 @@ export default {
                                yes: 'Ja',
                        },
                        chatError: 'Fehler beim Senden',
+                       chatMinAge: 'Mindestalter (in Tagen)',
                        chatSettings: 'Chat Bot Einstellungen',
+                       chatSource: 'Nachrichtenquelle',
+                       chatSources: {
+                               any: 'Alle',
+                               cat: 'Gleiche Kategorie',
+                               catchan: 'Mein Channel und gleiche Kategorie',
+                               chan: 'Mein Channel',
+                       },
                        chatSuccess: 'Nachricht in Warteschlange',
                        chatWaitMsgsMin: 'Min. Messages',
                        chatWaitMsgsMax: 'Max. Messages',
index dfa33f4fe0149e33487d49e936e140dbd265cec9..5d5a1e41da1925d3ec8cb89a45b1cc0aa7cfc877 100644 (file)
@@ -719,7 +719,15 @@ export default {
                                yes: 'Yes',
                        },
                        chatError: 'Error sending message',
+                       chatMinAge: 'Min. age (in days)',
                        chatSettings: 'Chat Bot Settings',
+                       chatSource: 'Message source',
+                       chatSources: {
+                               any: 'Any',
+                               cat: 'Same category',
+                               catchan: 'Own channel and same category',
+                               chan: 'Own channel',
+                       },
                        chatSuccess: 'Message queued',
                        chatWaitMsgsMin: 'Min. messages',
                        chatWaitMsgsMax: 'Max. messages',