Telegram 为robot提供的 API
官方页面在这里:Telegram Bot API
而我使用的是一个叫 python-telegram-bot 的第三方库:https://github.com/python-telegram-bot/python-telegram-bot
开始用之前,你需要在telegram上找到@BotFather,根据它的指示新建一个机器人。完成之后你会得到一条这样的消息:
被我码掉的部分才是你需要的东西,也就是这个机器人的token。
这个第三方库通过 Updater 来基于token监听机器人的变化(接收到的信息)
from telegram.ext import Updater
updater = Updater(token='TOKEN')
然后用 Dispatcher 对它做出响应
dispatcher = updater.dispatcher
具体的做法是,建立一个handler,对特定的命令执行相应的函数:
from telegram.ext import CommandHandler
start_handler = CommandHandler('start', start)
dispatcher.add_handler(start_handler)
上面的例子里,事先已经写好了一个start函数,(telegram里面大多数机器人都有 /start 命令)
当用户向机器人发送 /start 的时候,dispatcher 对’start’句柄调用start函数,传入 def start(bot, update) 的两个参数分别是 telegram.bot.Bot类 和 telegram.update.Update类。
我在函数内部执行以下代码:
print bot
print type(bot)
print update
print type(update)
输出是:
关于它们的属性和相关方法,可以参考官方文档。
python 操作 mysql
主要用到库 MySQLdb
大致是这么个操作方式:
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法获取操作游标
cursor = db.cursor()# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()# 关闭数据库连接
db.close()
具体可以参考这个:python操作mysql数据库
有一点需要注意:执行INSERT这类修改数据库的操作之后,需要用 db.commit() 这句来提交事务,否则 mysql 那边不会真正的插入数据。(关于 autocommit 的探讨参见:Python 的 MySQLdb 模块插入数据失败与 autocommit(自动提交)的关系)
为robot创建一个mysql数据库
mysql很简单,具体过程不表。
创建之后,由于我们robot主要还是要说中文的,所以把数据库的字符集改成utf8:
show variables like 'character%';
可以看到目前使用的是哪些字符集。
退出 mysql,去
vim /etc/mysql/my.cnf
在各对应字段加入默认字符集设置:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
重启服务之后,再进入 mysql,你会看到还是有一点小问题:
mysql> show variables like ‘character%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.01 sec)
我试了试执行:
ALTER DATABASE `Robot` DEFAULT CHARACTER SET utf8;
可行。
python的中文支持问题
python有很多方面都需要修改,才能正常处理中文字符串。在文档前加
# -*- coding: utf-8 -*-
这种常识就不说了,除此之外:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
可以参考这篇文章:python2.7 查询mysql中文乱码问题
使python在后台运行
这篇文章提供了多种方案:python脚本后台运行
我为了调试方便,使用的是tmux:
1、启动tmux
在终端输入tmux即可启动
2、在tmux中启动程序
直接执行如下命令即可(脚本参考上面的): python test123.py
3、直接关闭ssh终端(比如putty上的关闭按钮)
4、重新ssh上去之后,执行如下命令:
tmux attach
现在可以看到python程序还在正常执行。
来测试我的机器人
Telegram上搜索 @Twisted_bot 来与他对话。
相关代码开源在:https://github.com/MamaShip/TwistedBot