Пример #1
0
 /**
  * @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);
 }
Пример #3
0
 /**
  * @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;
                 }
             }
         }
     }
 }
Пример #4
0
 /**
  * @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));
 }
Пример #5
0
    /**
     * @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;
 }
Пример #9
0
 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;
 }
Пример #10
0
 /**
  * @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())));
     }
 }