2017年4月22日 星期六

LINE訊息機器人實作(二) - 後端(Ubuntu, Apache,PHP)

因為必須要有SSL所以我申請免費的Let's Encrypt, 每申請一次可使用90天
至於如何申請, 真的有非常多的資訊, 我這就不多說了

首先先不管Line官網所提供的SDK, 用手動的先寫簡單的回應程式

callback_test.php

<?php
$accessToken = 'Channel Access Token'; #網頁產生的那一串亂碼

$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);

$type = $jsonObj->events[0]->type;
if($jsonObj->events[0]->type == 'message') {
  $type = $jsonObj->events[0]->message->type;
  $text = $jsonObj->events[0]->message->text;
}

if($type != "text" ) {
  exit;
}

$replyToken = $jsonObj->events[0]->replyToken;
$response_format_text = [
 [
     "type" => "text",
     "text" => $text
 ]
];

$post_data = [
        "replyToken" => $replyToken,
        "messages" => $response_format_text
        ];

$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json; charser=UTF-8',
    'Authorization: Bearer ' . $accessToken
    ));
$result = curl_exec($ch);
curl_close($ch);

這樣理論上就完成了單純回應的程式


現在來簡單的玩一下, 單純回應以外的作法, 像是固定的文字做回應, 回應不止一個訊息, 可以回應5個訊息, 而且可以混形態, 像這就是回應一句話再一個位置
<?php
$accessToken = 'Channel Access Token'; #網頁產生的那一串亂碼\

$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);

$type = $jsonObj->events[0]->type;
if($jsonObj->events[0]->type == 'message') {
  $type = $jsonObj->events[0]->message->type;
  $text = $jsonObj->events[0]->message->text;
}

if($type != "text" ) {
  exit;
}

$replyToken = $jsonObj->events[0]->replyToken;

switch($text) {
  case "你在哪裡?" :
    $response_format_text = [
 [
     "type" => "text",
     "text" => "我在你心理!"
 ],
 [
    "type" => "location",
    "title" => "其實我在這裏唱歌",
    "address" => "104台北市中山區松江路199號",
    "latitude" => "25.056865",
    "longitude" => "121.533351"
 ]
];
  break;
  default:
     $response_format_text = [
      [
       "type" => "text",
       "text" => $text
     ]
    ];
  break;
}

$post_data = [
        "replyToken" => $replyToken,
        "messages" => $response_format_text
        ];

$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json; charser=UTF-8',
    'Authorization: Bearer ' . $accessToken
    ));
$result = curl_exec($ch);
curl_close($ch);



再一個範例, 像是我只要說任何東西後面是不要錢, 系統就回應一個確認視窗
<?php
$accessToken = 'Channel Access Token'; #網頁產生的那一串亂碼\

$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);

$type = $jsonObj->events[0]->type;
if($jsonObj->events[0]->type == 'message') {
  $type = $jsonObj->events[0]->message->type;
  $text = $jsonObj->events[0]->message->text;
}

if($type != "text" ) {
  exit;
}

$replyToken = $jsonObj->events[0]->replyToken;

switch($text) {
  case "你在哪裡?" :
    $response_format_text = [
 [
     "type" => "text",
     "text" => "我在你心理!"
 ],
 [
    "type" => "location",
    "title" => "其實我在這裏唱歌",
    "address" => "104台北市中山區松江路199號",
    "latitude" => "25.056865",
    "longitude" => "121.533351"
 ]
];
  break;
  case (mb_substr($text, -3) == "不要錢"):
      $response_format_text = [[
    "type" => "template",
    "altText" => "真的假的?",
    "template" => [
        "type" => "confirm",
        "text" => "真的假的? $text ?",
        "actions" => [
            [
              "type" => "message",
              "label" => "真的",
              "text" => "人人叫我, 真心不騙小狼君!"
            ],
            [
              "type" => "messsage",
              "label" => "假的",
              "text" => "你眼睛業障重!"
            ]
        ]
    ]
  ]];
  break;
  default:
     $response_format_text = [
      [
       "type" => "text",
       "text" => $text
     ]
    ];
  break;
}

$post_data = [
        "replyToken" => $replyToken,
        "messages" => $response_format_text
        ];

$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json; charser=UTF-8',
    'Authorization: Bearer ' . $accessToken
    ));
$result = curl_exec($ch);
curl_close($ch);


下篇就使用官方的line-bot-sdk-php

2017年4月21日 星期五

LINE訊息機器人實作(一) - 申請部份

按下開始使用API後1對1聊天會消失, 而且這動作將不可復原
不自動回應, 加入好友時不發問候語



到另一頁時, 要注意的就三個
Webhook URL : 這就是你的機器人的回應程式
範例 : https://abcdefg.com/callback_allen.php
當然, 你都還沒有後端, 這時都不會對的



Channel Access Token : 按下ISSUE, 會產生一大串亂碼, 這碼就Copy下來, 到時寫程式時要用到
Channel Secret : 按下SHOW, 會看見, 也可以Copy下來, 不過好像己經沒什麼用了

2015年6月23日 星期二

武俠Q傳 EZScript自動打魔教

//BlueStacks 畫面請調為800x600
Var1 =  1 //目前關數
Var2 =  9000// 到那關停止

ExtVar[0] =1  //1=自動模式, 其它=監控模式

ExtVar[1] = 2//氣血重要性 0=不點, 1=可點, 2=30%必點
ExtVar[2] = 2 //武力重要性 0=不點
ExtVar[3] = 1 //防禦重要性 0=不點
ExtVar[4] = 1 //內力重要性 0=不點
ExtVar[5] = 0 //身法重要性 0=不點

// 以下會先判斷血戰, 再力戰
ExtVar[6] = 490 // 血戰最高關數, 0=不打血戰
ExtVar[7] = 550 // 力戰最高關數, 0=不打力戰

//上限設定(自動並不會計算3%)
ExtVar[31] = 3500 //氣血 2800
ExtVar[32] = 4000 //武力 2800 2415就打到1000?
ExtVar[33] = 1000 //防禦  300
ExtVar[34] = 650  //內力 400
ExtVar[35] = 0 //身法

//目前設定
ExtVar[36] = Var4//氣血
ExtVar[37] = Var5//武力
ExtVar[38] = Var6//防禦
ExtVar[39] = Var7//內力
ExtVar[40] = Var8 //身法

Pos1 = XY2Pos[250,250] // 3%位置
Pos2 = XY2Pos[400,250] // 15%位置
Pos3 = XY2Pos[550,250] // 30%位置

While Var2 >= Var1
    Var3 = Color[11338048]
    Var4 = ExtVar[36] //目前氣血%數檢查
    Var5 = ExtVar[37] //目前武力%數檢查
    Var6 = ExtVar[38] //目前防禦%數檢查
    Var7 = ExtVar[39] //目前內力%數檢查
    Var8 = ExtVar[40] //目前身法%數檢查

    //(血戰/力戰/奮戰)
    If Var3=1450400
        If Var1 < ExtVar[6]
           ExtVar[21] = 27328757
        ElseIf Var1 < ExtVar[7]
           ExtVar[21] = 27197839
        Else
           ExtVar[21] = 27263553
        End If
        Call Click
    //加強屬性視窗
    ElseIf Var3=9231841
        ExtVar[21] = 0
        ExtVar[13]= 0
        //判斷30%
        Call CheckColor
        //ExtVar[12] = ExtVar[ExtVar[11]]
        //If ExtVar[11] = 0 //判斷不出屬性
            // ExtVar[12] = 0
        //    stop
        If ExtVar[ExtVar[11]] = 2 // 此屬性必點
            ExtVar[21] = XY2Pos[550,250]
        Else
            //判斷15%
            If ExtVar[12] = 0 //判斷不出屬性, 直接點3%
                ExtVar[21] = XY2Pos[250,250]
                Stop
            ElseIf ExtVar[ExtVar[12]] = 2
                // 此屬性必點
                ExtVar[21] = XY2Pos[400,250]
            Else
                //如果連15%都沒有必點, 就判斷30%的是否有比15%重要
                If ExtVar[ExtVar[11]] > ExtVar[ExtVar[12]]
                    ExtVar[21] = XY2Pos[550,250]
                //如果30%沒有比較大, 就判斷15%, 是否可以點
            ElseIf ExtVar[ExtVar[12]]  >= 1
  if ExtVar[ExtVar[11]] = ExtVar[ExtVar[12]]
        ExtVar[21] = XY2Pos[550,250]
  Else
                        ExtVar[21] = XY2Pos[400,250]
                   End If
                Else
              ExtVar[21] = XY2Pos[250,250]
             End If
          End If
        End If
        //If ExtVar[21] = 0
            //到這行就代表有問題了, 或是星星不夠15%跟30%
            //stop
        If ExtVar[21] != 0
   If ExtVar[22] != Var1
    ExtVar[45] = 0
            If ExtVar[21] = XY2Pos[550,250] //30%
      ExtVar[ExtVar[11]+35] = ExtVar[ExtVar[11]+35] + 30
              ExtVar[45] = ExtVar[11]
            ElseIf ExtVar[21] = XY2Pos[400,250] //15%
      ExtVar[ExtVar[12]+35] = ExtVar[ExtVar[12]+35] + 15
              ExtVar[45] = ExtVar[12]
            Else
      ExtVar[ExtVar[13]+35] = ExtVar[ExtVar[13]+35] + 3
              ExtVar[45] = ExtVar[13]
            End If
    If ExtVar[45]>0 && ExtVar[ExtVar[45]+35] >= ExtVar[ExtVar[45]+30]
              ExtVar[ExtVar[45]]=0
            End If
       ExtVar[22]=Var1
   End If
            Call Click
        End If
    // 掌門有驚喜
    ElseIf Var3=4016461 || Var3=8827838
           ExtVar[21] = 29557138
           Call Click
    ElseIf Var3=5590043||Var3=5591328
        //判斷是否完勝
          If Color[7667880]=4210752
             Var3= Color[11338048]
          Else
             ExtVar[21]=32768491
             Call Click
             Var1 = Var1 + 1
          End If
    End If
Wend
stop

CheckColor:
   Pos6 = Color[XY2Pos[550,250]]
   ExtVar[11] = 0
   //氣血 ok
   If Pos6 = 10049757
       ExtVar[11] = 1
   End If
   //武力 ok
   If Pos6 = 3364314
       ExtVar[11] = 2
   End If
   //防禦 OK
   If Pos6 = 5820412
       ExtVar[11] = 3
   End If
   //內力 ok
   If Pos6 = 11181104
       ExtVar[11] = 4
   End If
   //身法 ok
   If Pos6 = 4500002
       ExtVar[11] = 5
   End If

   Pos6 = Color[XY2Pos[400,250]]
   ExtVar[12] = 0
   //氣血 ok
   If Pos6 = 11036381
       ExtVar[12] = 1
   End If
   //武力 ok
   If Pos6 = 3364315
       ExtVar[12] = 2
   End If
   //防禦 ok
   If Pos6 = 5757949
       ExtVar[12] = 3
   End If
   //內力 OK
   If Pos6 = 10197809
       ExtVar[12] = 4
   End If
   //身法 ok
   If Pos6 = 4500002
       ExtVar[12] = 5
   End If

   Pos6 = Color[XY2Pos[250,250]]
   ExtVar[13] = 0
   //氣血 ok
   If Pos6 = 10509533
       ExtVar[13] = 1
   End If
   //武力 ok
   If Pos6 = 3364317
       ExtVar[13] = 2
   End If
   //防禦 ok
   If Pos6 = 5624831
       ExtVar[13] = 3
   End If
   //內力 ok
   If Pos6 = 10721587
       ExtVar[13] = 4
   End If
   //身法 ok
   If Pos6 = 4500002
       ExtVar[13] = 5
   End If
   Return


Click:
      ExtVar[45]= Var3
     If ExtVar[0] = 1
       Left Click ExtVar[21]
     Else
       MouseMove ExtVar[21]
     End If
     Delay (500)
     While  Color[11338048]=ExtVar[45]
     Wend
     Return

2013年12月12日 星期四

cgminer畫面小小的說明

很多人都看不懂, 在這裏寫上 cgminer的畫面說明

第一塊區域
(5s) : 代表5秒的平均速度
(avg) : 所有的平均速度
A: 遠端(礦池)接收的share數
R: 遠端不接收的share數
HW: 硬體錯誤數
WU: 我理解為實際工作速度, 也就是真正你的機器的效能(其實快不快我只看這個)
ST:
SS: 丟棄的己過時share數, 沒有送到遠端直接丟棄
NB: 接收到的塊(block)數
LW: 本地產生的工作項目
GF: 取得工作錯誤, 一般會發生在遠端(礦池)太慢, 來不及給你工作
RF: 遠端錯誤, 也是發生在遠端, 遠端太忙來不及工作
Commected to: 就代表你連的礦池
diff: 礦池目前派給你的難度
再來就是你的狀態跟使用者名稱
狀態一般是 LP 跟 stratum

Block: 目前正在解的塊
Diff: 這個塊的難度
Started: 從幾點開始解的
Best share:

第二塊區域
[P]ool management [G]PU management [S]ettings [D]isplay options [Q]uit
這行是設定的東西[大寫]裏的代表按鍵囉, 分別是對[P]礦池, [G]顯卡(其他硬體), [S]參數, [D]顯示選項, [Q]結束cgminer, 這裏我就不多打了
第二行後就是你硬體的資訊了, 這樣看下去
GPU 0:  溫度  風扇轉速 | 5秒平均速度/平均速度 | 接愛的shares數/不接受的shares數 硬體錯誤 實際工作速度 工作強度

第三區域
其實就是正在跑的所謂的明細, 比較常出現的東西
Stratum from pool 0 detected new block (礦池通知有新區塊)
Stratum form pool 0 requested work restart(礦池通知重新工作)
pool 0 difficulty changed to 17.xxxx(礦池要通知你把難度換成17)
Accepted xxxxxx Diff 23/17 GPU 1 pool 0(礦池接收了GPU1送出23個17難度的share)
Rejected xxxxxx Diff 23/17 GPU 0 pool 0(礦池拒絕了GPU0送出23個17難度的share)

2013年11月30日 星期六

挖礦(一) - P2Pool礦池(cpuminer)

P2Pool 礦池 : LTC:http://coin.allen0320.tw:9327
                        FTC:http://coin.allen0320.tw:19327
收款地址 :









CPU挖礦:
主要差別在作業系統的不同

下載好解開,下指令

minerd -o http://coin.allen0320.tw:9327 -u 收款地址 -p x -R 2

-o http://coin.allen0320.tw:9327  代表礦池位址, 要挖FTC的話網址改 http://coin.allen0320.tw:19327
-u 收款地址  就是你要收萊特幣的位置
-p x  密碼, P2P的礦池是不用密碼的, 所以用個x來放, 你也可以亂打
-R 2 2秒的重試時間, 我習慣加上, 要不要這個無所謂








4核心CPU挖礦畫面







你應該幾分鐘內就能看到你的收款地址出現在"本地礦工"的列表了


其實cpu挖礦非常不划算的 XD

2013年11月28日 星期四

P2Pool Litecoin礦池

自架了個P2Pool : coin.allen0320.tw:9327
只挖萊得幣, 中文化加上改了些讓自己覺得不錯的的顯示到是花了不少時間, 實在是太久沒碰程式碼了 :'(



新增了 FTC P2Pool : coin.allen0320.tw:19327

LINE訊息機器人實作(二) - 後端(Ubuntu, Apache,PHP)

因為必須要有SSL所以我申請免費的Let's Encrypt, 每申請一次可使用90天 至於如何申請, 真的有非常多的資訊, 我這就不多說了 首先先不管Line官網所提供的SDK, 用手動的先寫簡單的回應程式 callback_test.php <?p...