程式設計實現PHP應用程式變成聊天機械人 bot

2021-08-24 22:55:33 字數 4534 閱讀 3253

聊天機械人(bot)是什麼?

您不知道 bot 是什麼?其實並不只有您不知道。聊天機械人(bot) 是乙個程式,可以登入到乙個系統中(例如,irc 系統或西洋雙陸棋伺服器)並回答問題或進行遊戲。

irc 基礎

假如您不熟悉 irc 系統,可以從這裡入門。irc 系統由兩部分組成:伺服器和客戶機。伺服器建立數個虛擬通道供使用者登入並互相通訊。通道被給予乙個熟悉的名稱,以與對話的主題匹配。

通過指定主機名稱、埠號和所需的別名,將 irc 客戶機軟體連線到伺服器。客戶機在成功地連線到伺服器之後,就能夠加入任何數目的通道並開始傳送和接收訊息。要傳送訊息,只需在乙個文字框中輸入訊息,並按 enter 鍵,就跟任何其他的即時訊息客戶機一樣。然後客戶機傳送訊息到伺服器,伺服器然後將訊息廣播到加入該通道的所有其他的客戶機。irc 客戶機軟體對所有的作業系統及便攜裝置可用。

聊天機械人(bot)可以像其他的客戶機那樣執行。它們連線到伺服器,然後加入乙個或多個通道。一般而言,聊天機械人(bot) 不會自主地發出訊息。更確切地說,它們偵聽通道中來自使用者的符合特定格式的訊息。聊天機械人(bot)發出訊息以響應這些特定格式的請求。

安裝 pear 模組

pear 的乙個主要功能是,站點為 microsoft® windows®、linux® 以及 mac os x 作業系統提供了指令碼,使您能夠通過計算機的命令行方便地安裝 pear 模組。下面是我在 windows 命令提示視窗下的會話,通過該會話安裝了 net_smartirc 模組:

清單 1. windows 命令提示視窗下的會話

c: >pear install net_smartirc

downloading net_smartirc-1.0.0.tgz ...

starting to download net_smartirc-1.0.0.tgz (185,991 bytes)

........................................done: 185,991 bytes

install ok: net_smartirc 1.0.0

安裝 irc 伺服器

技巧建立 irc 聊天機械人(bot)的下乙個步驟是設定聊天機械人(bot)能夠登入的伺服器。您可能已經使聊天機械人(bot) 登入到了乙個公共伺服器,但是我建議先安裝乙個本地伺服器用於測試。

我選擇執行 windows 版本的 「beware ircd」 伺服器(beware ircd 伺服器還有乙個 linux 版本)。我檢視了幾台伺服器,發現這一台是最容易使用的。安裝 beware ircd 伺服器很簡單,我將其安裝在 c:ircd 目錄下。從該目錄下,我通過開啟命令提示符並鍵入如下命令,執行該伺服器:

c:ircd> bircd

注意:無需更改任何配置。

但是如何知道伺服器是否正在執行呢?要進行驗證,需要安裝 irc 客戶機。

安裝 irc 客戶機

要測試本地伺服器,並且與聊天機械人(bot)進行通訊,需要安裝 irc 客戶機。我選擇安裝用於 windows 的常見的 mirc 客戶機(在撰寫本文時,v6.16 是最新版本)。您可以選擇適合您的平台的客戶機。

安裝 mirc 客戶機後,我從 startstart mirc 應用程式。接著使用 connect 命令連線到 localhost。我使用選單中的 join 命令,連線到 #weather 通道,如圖 1 所示。

圖 1. 從 irc 客戶機加入 #weather 通道

連線通道後,將顯示如圖 2 所示的視窗。從這裡我可以與其他人或者是聊天機械人(bot)交談。

圖 2. #weather 通道的聊天介面

現在,伺服器已在本地執行,irc 客戶機已安裝好並在執行,並且安裝了 pear 模組,我就可以編寫接收我所在地區的天氣狀況的 php 聊天機械人(bot) 了。

從連線開始

我將建立指令碼的幾個版本。每乙個版本都會新增更多的函式。php 聊天機械人(bot)指令碼的第乙個版本如清單 2 所示。在該指令碼中,我登入到 irc 伺服器並建立了乙個對特殊型別的訊息作出響應的類。該模組專門用於為 irc 建立 聊天機械人(bot)。

清單 2. 聊天機械人(bot)第乙個簡單的版本

<?php

include_once('net/smartirc.php');

class weatherbot

}$host = "localhost";

$port = 6667;

$nick = "weather";

$chan = "#weather";

$bot = &new weatherbot( );

$irc = &new net_smartirc( );

$irc->setusesockets( true );

$irc->registeractionhandler( smartirc_type_channel,

'^weather', $bot, 'weather' );

$irc->connect( $host, $port );

$irc->login( $nick, 'weather bot', 0, $nick );

$irc->join( array( $chan ) );

$irc->listen( );

$irc->disconnect( );

?>

指令碼中重要的部分是 registeractionhandler 方法,該方法連線到具有特殊動作字串和方法的 bot 物件。^weather 字串是乙個正規表示式,如果該字串與進入 irc 通道的任何文字型別相匹配,那麼將呼叫動作處理器。

指令碼中其他重要的部分是 weatherbot 類中的 weather 方法。該方法對天氣請求作出響應,並且傳回(在此時)「yeah, weather」。(在本文的結尾部分,它將告訴您天氣狀況。)

要啟動指令碼,我使用下列命令在命令提示符下執行它:

c:ircd> php ircbot.php

指令碼註冊到本地 irc 伺服器,並開始進行無限迴圈。

圖 3 展示了註冊到伺服器的 weather 聊天機械人(bot)。同時也展示了我在文字視窗中輸入 weather 並按 enter 鍵。

圖 3. 與 weather 聊天機械人(bot)進行交談

weather 聊天機械人(bot)接著能夠以固定的字串 yeah, weather 作出響應。

這是乙個好的開始。現在,如何獲得天氣狀況呢?

獲得天氣狀況

要獲得天氣狀況,將使用 weather web 服務 pear 模組。清單 3 展示了該模組,我對該模組進行了修改以提供我所在地區的天氣狀況。

清單 3. 報告天氣狀況的 weather 聊天機械人(bot)

<?php

include_once('net/smartirc.php');

include_once('services/weather.php');

$weather = new services_weather();

$wdc = $weather->service( "weatherdotcom" );

class weatherbot}}

$host = "localhost";

$port = 6667;

$nick = "weather";

$chan = "#weather";

$bot = &new weatherbot( );

$irc = &new net_smartirc( );

$irc->setusesockets( true );

$irc->registeractionhandler( smartirc_type_channel,

'^weather', $bot, 'weather' );

$irc->connect( $host, $port );

$irc->login( $nick, 'weather bot', 0, $nick );

$irc->join( array( $chan ) );

$irc->listen( );

$irc->disconnect( );

?>

從那裡,我得到第一天的天氣資訊,並通過 irc 通道將天氣結果以訊息的形式傳送出去。圖 4 展示了產生的文字視窗。

但是我想您並不想要得到我 所在地區的天氣資訊。那麼,如何得到您所在城市的天氣資訊呢?

得到您需要的天氣資訊

要得到與您相關的天氣資訊,需要解析請求的文字。這就意味著要對 weather 方法做一些小小的修改,如清單 4 所示。

清單 4. 新的 weather 方法

class weatherbot}}

圖 5. swarthmore, pa. 的天氣情況

結束語本文涵蓋了連線 php 應用程式到 irc 的基本內容。您可以使用該應用程式作為起點,並且新增自己的 php 類到**中。然後您就可以通過 irc 利用瀏覽器使用您的 web 應用程式了。

我是讓使用者使用他們喜歡的交流方式的堅定的擁護者 —— 傳送電子郵件訊息或者是通過即時訊息客戶機。本文所提供的僅僅是在 php 應用程式中放入另一種型別的介面的乙個例子。我鼓勵在帶有 php **的標準的 web 範圍之外進行思考。

另外,我鼓勵您將自己的模組提供給 pear。最好是提供乾淨壓縮的**,這將有益於大家。

PHP應用程式安全

繼續php應用程式安全的 主要一定要注意以下幾個方面 1 過濾sql注入攻擊 可以使用addslashes等php內建的直接給出函式,方便使用 function verifyinput input 而在顯示時則用 正常顯示之 或者乾脆就用 mysql real escape string函式過濾,就...

PHP應用程式安全

繼續php應用程式安全的 主要一定要注意以下幾個方面 1 過濾sql注入攻擊 可以使用addslashes等php內建的直接給出函式,方便使用 function verifyinput input 而在顯示時則用 正常顯示之 或者乾脆就用 mysql real escape string函式過濾,就...

使用應用程式域程式設計

以前使用程序邊界來隔離在同一臺計算機上執行的應用程式。每乙個應用程式被載入到單獨的程序中,這樣就將該應用程式與在同一臺計算機上執行的其他應用程式相隔離。隔離這些應用程式的原因在於記憶體位址是與程序相關的 在目標程序中,不能通過任何有意義的方式使用從乙個程序傳遞到另乙個程序的記憶體指標。此外,您不能在...