/** * @param Message $message * * @return Request */ public function create(Message $message) { $request = new Request($this->discord, $this->logger, $this->twig, $this->adminId, $this->prefix, $message); if (!$this->interactive) { $request->setInteractive(false); } return $request; }
/** * @param Request $request * @param array $matches * * @return Timer|TimerInterface */ protected function restart(Request $request, array $matches = []) { $time = isset($matches[1]) ? $matches[1] : 0; if ($time > 0) { $this->logger->info("Restarting in {$time} seconds."); return $request->runAfter($time, function () use($request) { $this->restart($request); }); } $request->getLogger()->info('Restarting!'); $request->reply('Restarting'); die(1); }
/** * @param Request $request * @param array $matches */ protected function renderHelpItem(Request $request, array $matches) { $modules = $this->getModuleCommands(); foreach ($modules as $name => $commands) { /** @var AbstractBotCommand[] $commands */ foreach ($commands as $command) { if ($command->isEnabled()) { if ($command->getName() === $matches[1]) { if (!empty($command->getHelp())) { $request->reply($command->getHelp()); } return; } } } } }
/** * @param Request $request */ protected function renderStats(Request $request) { $users = $this->getUsers(); $data = ['servers' => count($request->getDiscord()->client->guilds), 'channels' => $this->getChannelCount(), 'users' => $users->count(), 'online' => count($users->filter(function (Member $user) { return $user->status !== 'offline'; })), 'channel' => $request->isPrivateMessage() ? [] : ['channels' => count($request->getServer()->channels), 'users' => count($request->getServer()->members), 'online' => count($request->getServer()->getMembersAttribute()->filter(function (Member $user) { return $user->status !== 'offline'; }))]]; $request->reply($request->renderTemplate('@Core/stats.twig', $data)); }
/** * @param Request $request * @param array $matches * * @return \React\EventLoop\Timer\Timer|\React\EventLoop\Timer\TimerInterface */ protected function evalCode(Request $request, array $matches = []) { $request->deleteMessage($request->getMessage())->then(function () use($request, $matches) { $request->reply('Executing Code')->then(function (Message $message) use($request, $matches) { // Lets set some local variables for the eval $client = $this->getDiscord(); $container = $this->container; $server = $request->getServer(); $author = $request->getAuthor(); $channel = $request->getChannel(); $self = $this; $start = microtime(true); $_____responseContent = <<<'EOF' ```php # Executed the following code in %d ms %s # Resulted in the following: %s ``` EOF; $sprintf = []; $sprintf[] = $matches[2]; try { if ($matches[1] === ' --raw') { $response = eval($matches[2]); var_dump($response); } else { $language = new ExpressionLanguage(); $sprintf[0] = $language->compile($matches[2], array_keys(get_defined_vars())) . ' (' . $matches[2] . ')'; $response = @$language->evaluate($matches[2], get_defined_vars()); } } catch (\Exception $e) { $sprintf[] = $e->getMessage() . ' on line ' . $e->getLine() . ' in file ' . $e->getFile(); $sprintf[] = (microtime(true) - $start) * 1000; return $request->updateMessage($message, sprintf($_____responseContent, $sprintf[2], $sprintf[0], $sprintf[1])); } if (is_array($response) || is_object($response)) { $response = json_decode($response, true); } $sprintf[] = $response; $sprintf[] = (microtime(true) - $start) * 1000; $request->updateMessage($message, sprintf($_____responseContent, $sprintf[2], $sprintf[0], $sprintf[1])); }); }); }
/** * @param Request $request * @param array $matches * * @return bool|ServerModule|mixed|null */ private function getServerModule(Request $request, array $matches) { $moduleName = $matches[2]; $server = $request->getServerManager()->getDatabaseServer(); $serverModule = null; foreach ($server->getModules() as $item) { $name = strtolower(str_replace('Module', '', $item->getModule()->getName())); if ($name === strtolower($moduleName)) { $serverModule = $item; break; } } if (empty($serverModule)) { $request->reply("\"{$moduleName}\" is not a valid module name."); return false; } if (!$serverModule->getModule()->isDisableable()) { $request->reply("\"{$moduleName}\" is not disableable."); return false; } return $serverModule; }
/** * @param Request $request * @param array $matches */ protected function toggleIgnore(Request $request, array $matches) { $ignore = $this->setIgnored(empty($matches[1]), $matches[2], $matches[3]); $request->reply($ignore ? 'Ignored' : 'Unignored'); }
public function handle(Request $request) { foreach ($this->handlers as $handler) { if ($this->isAdminCommand() && !$request->isAdmin()) { continue; } $type = $handler['type']; if ($type === 'responds' && !$request->isBotMention()) { continue; } $pattern = $handler['pattern']; $callback = $handler['callback']; $content = $request->getContent($type === 'responds'); $regex = Factory::getGuard(); $matched = $regex->match($pattern, $content, $matches); if (!$matched) { continue; } if ($callback($request, $matches) !== false) { return true; } } return false; }
private function isIgnored(Request $request) { $channel = $request->getChannel(); if (!is_object($channel)) { return false; } $server = $request->getServer(); if (!is_object($server)) { return false; } $author = $request->getAuthor(); if (!is_object($author)) { return false; } $channelId = (string) $channel->id; $serverId = (string) $server->id; $userId = (string) $author->id; if ($userId === $this->adminId) { return false; } foreach ($this->ignoredRepository->all() as $ignored) { if (!$ignored->getIgnored()) { continue; } if ($ignored->isType('channel') && $ignored->getIdentifier() === $channelId) { return true; } if ($ignored->isType('server') && $ignored->getIdentifier() === $serverId) { return true; } if ($ignored->isType('user') && $ignored->getIdentifier() === $userId) { return true; } } return false; }
/** * @param Request $request */ protected function onMessage(Request $request) { $request->setServerManager($this); $isCommand = false; foreach ($this->commandRepository->all() as $command) { if ($command->handle($request)) { $isCommand = true; break; } } if ($this->container->getParameter('log_messages') || $isCommand) { $this->logger->debug(sprintf('%s <comment>[%s]</comment> <question>[%s/#%s]</question> <comment><@%s></comment> %s', $isCommand ? '<error>[Command]</error>' : '<info>[Message]</info>', (new \DateTime())->format('d/m/y H:i:s A'), $request->isPrivateMessage() ? 'Private Message' : $request->getServer()->name, $request->getChannel()->name, $request->getAuthor()->username, str_replace("\n", '\\n', $request->getContent()))); } }