Permalink
Fetching contributors…
Cannot retrieve contributors at this time
127 lines (80 sloc) 7.86 KB

一、问题目录

二、问题的回答

python初学者需注意的问题

  • 建议先系统的学习一下 python 的语法,参考资料: python3 教程
  • 建议学习和使用 python3 ,建议使用 PyCharm IDE
  • python 脚本的开头要加上 “# -*- coding: utf-8 -*-” ,并保存为 utf8 编码格式
  • 不要把你的脚本文件保存为 qqbot.py 或 sys.py ,或系统中已有的库或关键字的名字;也不要在脚本中将变量、函数等命名为 qqbot/sys/time 等名字。

为什么修改了配置没有生效?

请确认是在配置文件中的 somebody 项下修改的配置,并且是以 qqbot -u somebody 的方式启动。

当然,也可以自己新增一个 xxx 的项,并以 qqbot -u xxx 的方式启动。

如果你已理解配置文件中的配置优先级和命令行参数,可以修改“默认配置”,或者在命令行参数中修改配置。

onQQMessage 函数中如何获取消息发送者的 QQ 号码等信息?

使用该函数中第二、三个参数 contact 和 member 的 qq 等属性,如 contact.qq / contact.name 等。详见: 联系人对象的属性

注意: member 有时侯可能为 None 。

onQQMessage 函数中如何判断消息是好友消息还是群消息?

contact.ctype 为 'buddy'/'group'/'discuss' 时,分别代表本消息时 好友消息/群消息/讨论组消息 。

onInterval 函数是否可以自己设置调用的间隔时间?

不能。建议使用 qqbotsched 装饰器,功能更加强大。

如何稳定的长期保持在线?

由于 smartqq 协议的限制,每次登录成功后的 cookie 会每在 1 ~ 2 天后失效,将被腾讯服务器强制下线,此时 必须 手工扫码重新登录,因此无法稳定的长期保持在线。

可以打开邮箱模式和自动重启模式,并配合 qqbot.plugins.schedrestart 插件使用,每天在固定的时间扫码登录一次,基本上可以稳定的保持在线状态。建议直接使用 QQ 邮箱,这样发送二维码邮件后手机 QQ 可以马上收到通知,直接用手机 QQ 打开邮件并长按二维码图片就可以扫码了。

如何采用 virtualenv 将本项目安装至独立的运行环境?

本项目依赖于 reqests 、flask 、 certifi 和 apscheduler 库,用 pip 安装本项目时会自动安装以上四个库以及它们所依赖的库。一般来说安装本项目不会与系统其他项目冲突,因此可直接安装至系统的全局 site-packages 目录。

在某些系统中可能会出现 https 请求错误,这时需要安装 certifi 库的指定版本(2015.4.28 版),可能会将系统中已有的 certifi 库升级或降级并导致会使系统中的其他项目无法使用,这时可以使用 virtualenv 将本项目安装至独立的运行环境中。

另外,Windows 下的用户有时需要使用 pyinstaller 打包自己利用 qqbot 开发的程序,此时也建议使用 virtualenv 将 qqbot 以及 pyinstaller 安装至独立的运行环境中,然后利用此环境中的 pyinstaller 进行打包。

virtualenv 基本原理和使用可参考 廖雪峰的教程

以下脚本(Linux下)将在 ~/PyVenv/qqbot-venv 目录下创建一个独立的运行环境,并将 qqbot 及其依赖的库安装至 ~/PyVenv/qqbot-env/lib/site-packages 目录下。系统中的原有的库不会被改动,其他项目不受影响。

sudo pip install virtualenv

mkdir ~/PyVenv
cd ~/PyVenv
virtualenv --no-site-packages qqbot-venv

source ~/PyVenv/qqbot-env/bin/activate

pip install requests==2.7.0
pip install certifi==2015.4.28
pip install flask==0.12
pip install apscheduler==3.3.1
pip install qqbot

注意:使用本方式安装本项目后,每次使用 qqbot 和 qq 命令之前,需要先运行下面这条命令激活 qqbot-venv 下的运行环境:

source ~/PyVenv/qqbot-env/bin/activate

Windows 下, 上述脚本改为:

pip install virtualenv

c:
mkdir %UserProfile%\PyVenv
cd %UserProfile%\PyVenv
virtualenv --no-site-packages qqbot-env

%UserProfile%\PyVenv\qqbot-env\Scripts\activate

pip install requests==2.7.0
pip install certifi==2015.4.28
pip install flask==0.12
pip install apscheduler==3.3.1
pip install qqbot

其中 %UserProfile% 是用户主目录,Win7中为 C:\Users\xxx 目录。

Windows 下如果需要使用 pyinstaller 打包,还需要安装 pyinstaller 和 pypiwin32 :

pip install pyinstaller==3.2.1
pip install pypiwin32==219

然后在 %UserProfile%\PyVenv\qqbot-env 下新建一个目录 myapp :

cd %UserProfile%\PyVenv\qqbot-env
mkdir myapp
cd myapp

在该目录下新建一个 main.py ,内容为:

from qqbot import Main; Main()

再新建一个 hook-ctypes.macholib.py ,内容为:

from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('apscheduler')

最后,输入以下命令将 main.py 打包为 dist\main.exe

..\Scripts\pyinstaller -F main.py --additional-hooks-dir=.