telegram bot及nginx rewrite配置
telegram bot
最近完成了两个telegram bot,分别用来做短网址服务和记账服务,过程比较简单:
1.注册telegram帐号(废话)
2.添加@BotFather机器人,按照提示会给你一个token,在对话框还有很多其他命令,更改头像等
3.添加webhook,按照说明https://core.telegram.org/bots/api#setwebhook
4.完成
我用的语言是php😄,直接拷贝示例代码,获取message之后,按照需求进行处理,记录一下核心代码:
短网址服务:[@MyShortUrlBot](tg://resolve?domain=MyShortUrlBot)
function getString(){
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = '';
for($i = 0; $i < 2; $i++){
$password .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $password;
}
function getUrl($origin){
$get = true;
$i = 0;
while ($get && $i < 10) {
$i++;
$filename = getString();
$url = 'url/'.$filename;
if(!file_exists($url)){
$myfile = fopen($url, "w") or die("Unable to open file!");
fwrite($myfile, $origin);
fclose($myfile);
$get = false;
return 'https://imhy.me/'.$filename;
}
}
}
记账服务:[@autoaccount_bot](tg://resolve?domain=autoaccount_bot)
function saveAccount($origin, $chat_id){
$message = explode(' ', $origin);
if ($message[0] == '') {
return 'can not be empty';
}
if ($message[1] == '') {
$type = '其他';
}else{
$type = $message[1];
}
$initdb = new mydb();
$query = 'INSERT INTO `tablename`';
if($initdb->db->Execute($query)){
return 'got it';
}else{
return 'an error happended';
}
}
注意
webhook必须要https
nginx rewrite配置
在使用短网址服务的时候,为了简洁及桌面使用,又开启了api服务,所以就配置了nginx的rewrite规则,特意记录下来,因为还是困扰了好久才搞定的
location = / {
rewrite / https://1em0n.com redirect;
}
location ^~ /api/ {
rewrite ^/api/(.*)$ /api.php?url=$1 last;
}
location / {
rewrite ^(.*)$ /index.php?url=$uri last;
}
短短的三行,规则如下:
- 如果直接访问,不带任何参数直接跳转到https://1em0n.com
- 如果以/api/开头,说明是调用api,用api.php处理
- 其他的就视为使用短网址服务,使用index.php处理