使用BaseBuiltin类来自定义函数,判断第一个输入的IP地址是否包含第二个
时间: 2023-11-28 07:48:22 浏览: 31
可以使用以下代码实现:
```python
import ipaddress
from typing import List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.types import DomainDict
class CheckIpContains(Action):
def name(self) -> str:
return "action_check_ip_contains"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: DomainDict) -> List[Dict[Text, Any]]:
ip1 = tracker.latest_message['entities'][0]['value']
ip2 = tracker.latest_message['entities'][1]['value']
try:
ip1 = ipaddress.ip_address(ip1)
ip2 = ipaddress.ip_network(ip2, strict=False)
if ip1 in ip2:
dispatcher.utter_message(text=f"{ip1} 包含在 {ip2} 中")
else:
dispatcher.utter_message(text=f"{ip1} 不在 {ip2} 中")
except ValueError:
dispatcher.utter_message(text="请输入正确的 IP 地址和网络地址")
return []
```
在上面的代码中,我们使用了 `ipaddress` 模块来处理 IP 地址和网络地址。在 `run` 方法中,我们从 `Tracker` 中获取了两个输入的值。然后,我们将这两个值转换为 `ipaddress` 模块中的对象,并使用 `in` 运算符判断第一个 IP 是否包含在第二个网络地址中。最后,我们使用 `utter_message` 方法将结果发送回用户。