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

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

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处理