}
$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',
]);
}
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() {
</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">
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,
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,
}),
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,
},
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
}),
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),