Jacek Kowalski
2012-08-24 a922bd46081f4536843033de946fa19406aadf2e
modules/80_lang/handler.php
@@ -1,7 +1,48 @@
<?php
class bot_lang_module implements BotModule {
   private $APPID = '';
require_once(dirname(__FILE__).'/msapi_config.php');
class msapi extends msapi_config {
   public $url;
   
   function __construct($url) {
      $this->url = $url;
   }
   function execute($params) {
      if(!is_array($params)) {
         throw new Exception('Przekazany parametr nie jest tablicą');
      }
      foreach($params as $name => &$param) {
         if(substr($name, 0, 1)!='$' && is_string($param)) {
            $param = '\''.strtr($param, array('\'' => '\'\'')).'\'';
         }
      }
      unset($param);
      $params['$format'] = 'json';
      $context = stream_context_create(array(
         'http' => array(
            'request_fulluri' => TRUE,
            'header' => 'Authorization: Basic '.base64_encode(':'.$this->accountKey)
         ),
      ));
      $content = file_get_contents($this->url.'?'.http_build_query($params, '', '&'), FALSE, $context);
      if(!$content) {
         return FALSE;
      }
      $content = json_decode($content, TRUE);
      if(!$content) {
         return FALSE;
      }
      return $content;
   }
}
class bot_lang_module implements BotModule {
   function handle($msg, $params) {
      $args = trim($msg->args);
      
@@ -23,13 +64,22 @@
      $data = jsarray::parse($data);
      
      if(!$data OR count($data)==0 OR count($data[1])==0) {
         $data = file_get_contents('http://api.microsofttranslator.com/v2/Http.svc/Translate?appId='.urlencode($this->APPID).'&text='.urlencode($args).'&from='.$params[0].'&to='.$params[1]);
         $api = new msapi('https://api.datamarket.azure.com/Bing/MicrosoftTranslator/Translate');
         $data = $api->execute(array(
            'From' => $params[0],
            'To' => $params[1],
            'Text' => $args,
            '$skip' => 0,
            '$top' => 1
         ));
         
         if(!$data) {
            return new BotMsg('Błąd podczas pobierania danych ze słownika. Przepraszamy.');
         if(!$data || !isset($data['d']['results'][0]['Text'])) {
            return new BotMsg('Błąd podczas pobierania danych z tłumacza. Przepraszamy.');
         }
         
         return new BotMsg('<u>Tłumaczenie (by Microsoft Translator):</u><br />'."\n".strip_tags($data));
         $data = $data['d']['results'][0]['Text'];
         return new BotMsg('<u>Tłumaczenie (by Microsoft Translator):</u><br />'."\n".htmlspecialchars($data));
      }
      else
      {
@@ -49,7 +99,7 @@
      return new BotMsg('Wybrana komenda nie istnieje. Prawdopodobnie chodziło ci o jedną z komend językowych, których nazwy zapisywane są <b>bez</b> spacji pomiędzy spacji pomiędzy kodami języków (angpol, a nie: ang pol).<br /><br />'."\n\n"
      
      . '<u>Spróbuj:</u><br />'."\n"
      . $msg->command.ltrim($msg->args));
      . $msg->command.htmlspecialchars(ltrim($msg->args)));
   }
}
?>