->first();
}
+ public function randomOfClass($class) {
+ $line = $this->queryChatlog()
+ ->where('classification', '=', $class)
+ ->first();
+ return $line ? $line->text_content : '';
+ }
+
+ public function queryChatlog() {
+ return ChatLog::where('type', '=', 'chat')
+ ->where('banned', '=', false)
+ ->where('created_at', '<', now()->sub(1, 'day'))
+ ->where(function ($query) {
+ $query->whereNull('detected_language');
+ $query->orWhereIn('detected_language', $this->getPreferredLanguages());
+ })
+ ->inRandomOrder();
+ }
+
+ public function getPreferredLanguages() {
+ $setting = $this->getChatSetting('language');
+ if ($setting) {
+ return [$setting];
+ }
+ if (!empty($this->languages)) {
+ return $this->languages;
+ }
+ return ['de'];
+ }
+
+ public function getChatSetting($name, $default = null) {
+ if (array_key_exists($name, $this->chat_settings)) {
+ return $this->chat_settings[$name];
+ }
+ return $default;
+ }
+
public function getGuessingLeaderboard() {
$query = $this->winners()
->selectRaw('(select t2.uname from guessing_winners t2 where t2.uid = guessing_winners.uid order by created_at desc limit 1) as name, sum(score) as score')
$this->sendIRCMessage(IRCMessage::privmsg($channel->twitch_chat, $text));
}
- private function getChatSetting(Channel $channel, $name, $default = null) {
- if (array_key_exists($name, $channel->chat_settings)) {
- return $channel->chat_settings[$name];
- }
- return $default;
- }
-
private function getNotes(Channel $channel) {
if (!isset($this->notes[$channel->id])) {
$this->notes[$channel->id] = [
$last = $this->getNote($channel, 'last_special');
if ($last != 'gg' && $this->checkForGG($channel)) {
$this->setNote($channel, 'last_special', 'gg');
- return $this->randomOfClass($channel, 'gg');
+ return $channel->randomOfClass('gg');
}
if ($last != 'number' && $this->checkForNumbers($channel)) {
$this->setNote($channel, 'last_special', 'number');
}
if ($last != 'glhf' && $this->checkForGLHF($channel)) {
$this->setNote($channel, 'last_special', 'glhf');
- return $this->randomOfClass($channel, 'gl');
+ return $channel->randomOfClass('gl');
}
if ($last != 'hi' && $this->checkForGreeting($channel)) {
$this->setNote($channel, 'last_special', 'hi');
- return $this->randomOfClass($channel, 'hi');
+ return $channel->randomOfClass('hi');
}
if ($last != 'hype' && $this->checkForHype($channel)) {
$this->setNote($channel, 'last_special', 'hype');
- return $this->randomOfClass($channel, 'hype');
+ return $channel->randomOfClass('hype');
}
if ($last != 'pog' && $this->checkForPog($channel)) {
$this->setNote($channel, 'last_special', 'pog');
- return $this->randomOfClass($channel, 'pog');
+ return $channel->randomOfClass('pog');
}
if ($last != 'o7' && $this->checkForSalute($channel)) {
$this->setNote($channel, 'last_special', 'o7');
- return $this->randomOfClass($channel, 'o7');
+ return $channel->randomOfClass('o7');
}
return false;
}
- private function queryChatlog(Channel $channel) {
- return ChatLog::where('type', '=', 'chat')
- ->where('banned', '=', false)
- ->where('created_at', '<', now()->sub(1, 'day'))
- ->where(function ($query) use ($channel) {
- $query->whereNull('detected_language');
- $query->orWhereIn('detected_language', $this->getPreferredLanguages($channel));
- })
- ->inRandomOrder();
- }
-
private function randomChat(Channel $channel) {
- $line = $this->queryChatlog($channel)
+ $line = $channel->queryChatlog()
->whereIn('classification', ['hi', 'hype', 'lol', 'pog', 'unclassified'])
->first();
return $line->text_content;
return random_int($min, $max);
}
- private function randomOfClass(Channel $channel, $class) {
- $line = $this->queryChatlog($channel)
- ->where('classification', '=', $class)
- ->first();
- return $line->text_content;
- }
-
private function randomLaughter(Channel $channel) {
return Arr::random([
':tf:',
'SUBprise',
'xD',
'YouDontSay',
- $this->randomOfClass($channel, 'lol'),
+ $channel->randomOfClass('lol'),
]);
}
private function randomMsg(Channel $channel) {
- $line = $this->queryChatlog($channel)->first();
+ $line = $channel->queryChatlog()->first();
return $line->text_content;
}
private function randomWaitMsgs(Channel $channel) {
- $min = $this->getChatSetting($channel, 'wait_msgs_min', 1);
- $max = $this->getChatSetting($channel, 'wait_msgs_max', 10);
+ $min = $channel->getChatSetting('wait_msgs_min', 1);
+ $max = $channel->getChatSetting('wait_msgs_max', 10);
return random_int($min, $max);
}
private function randomWaitTime(Channel $channel) {
- $min = $this->getChatSetting($channel, 'wait_time_min', 1);
- $max = $this->getChatSetting($channel, 'wait_time_max', 900);
+ $min = $channel->getChatSetting('wait_time_min', 1);
+ $max = $channel->getChatSetting('wait_time_max', 900);
return random_int($min, $max);
}
$this->notes[$channel->id]['wait_time'] = $this->randomWaitTime($channel);
}
- private function getPreferredLanguages(Channel $channel) {
- $setting = $this->getChatSetting($channel, 'language');
- if ($setting) {
- return [$setting];
- }
- if (!empty($channel->languages)) {
- return $channel->languages;
- }
- return ['de'];
- }
-
private function isDirectedAtMe($raw_text) {
$text = strtolower($raw_text);
if (strpos($text, 'horstie') !== false) {
}
private function shouldRespond(Channel $channel) {
- $setting = $this->getChatSetting($channel, 'respond', 'yes');
+ $setting = $channel->getChatSetting('respond', 'yes');
if ($setting == 'yes') {
return true;
}
import Icon from '../common/Icon';
import ToggleSwitch from '../common/ToggleSwitch';
+const CHAT_CATEGORIES = ['unclassified', 'hi', 'gl', 'gg', 'lol', 'pog', 'hype', 'o7'];
+
const Controls = () => {
const [channel, setChannel] = React.useState(null);
const [chatText, setChatText] = React.useState('');
}
}, [channel, chatText, t]);
+ const randomChat = React.useCallback(async (category) => {
+ try {
+ await axios.post(`/api/channels/${channel.id}/chat`, {
+ bot_nick: 'horstiebot',
+ category,
+ });
+ 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 });
</Button>
</div>
</Form.Group>
+ <h3 className="mt-3">{t('twitchBot.randomChat')}</h3>
+ <div className="button-bar">
+ {CHAT_CATEGORIES.map(category =>
+ <Button
+ key={category}
+ onClick={() => { randomChat(category); }}
+ variant="outline-secondary"
+ >
+ {t(`twitchBot.chatCategories.${category}`)}
+ </Button>
+ )}
+ </div>
</Col>
<Col className="mt-5" md={6}>
<h3>{t('twitchBot.chatSettings')}</h3>