本篇文章记录一下自己在编写QQ机器人的时候所遇到的一些问题和核心功能的实现。
介于快过年啦,这里搭建一个机器人实现定时拜年的功能
(补加:由于无法获取好友分组且不想向所有人拜年,我们可以先在txt文件中存入想拜年对象,之后对好友列表进行筛查。)
资料来源
(1)环境配置:参考QQ机器人制作教程,超详细_皮小孩ls的博客-CSDN博客_qq机器人
配置好后可以实现发消息的功能即可。
(2)获取好友列表以及发送消息API:大家可以浏览go-cqhttp官网查找,我们用到的如下:
知道了这些,前期准备工作就欧克了。下面展示代码:
import requests
import socket
from datetime import datetime
import time
def send_msg(resp_dict):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '127.0.0.1'
client.connect((ip, 5700))
msg_type = resp_dict['msg_type'] # 回复类型(群聊/私聊)
number = resp_dict['number'] # 回复账号(群号/好友号)
msg = resp_dict['msg'] # 要回复的消息
# 将字符中的特殊字符进行url编码
msg = msg.replace(" ", "%20")
msg = msg.replace("\n", "%0a")
if msg_type == 'group':
payload = "GET /send_group_msg?group_id=" + str(
number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"
elif msg_type == 'private':
payload = "GET /send_private_msg?user_id=" + str(
number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"
print("发送" + payload)
client.send(payload.encode("utf-8"))
client.close()
return 0
if __name__ == '__main__':
#获取需要发生祝福的好友列表,以字典形式存储:contact【‘qq’】=name
contact = {}
with open('contact.txt', encoding='utf-8') as f:
for line in f.readlines():
line = line.replace('\n', '').split(',')
contact[line[0]] = line[1]
#发送get请求获取好友列表名单
t = requests.get(url='http://127.0.0.1:5700/get_friend_list')
friends = t.json()
friend_id = []
for i in friends['data']: #获取用户用户名以及qq号
friend_id.append(str(i['user_id']))
#等待时间到来
while True:
now = datetime.now() #获取当前时间
if now.hour == 0 and now.minute == 0:
for id in friend_id:
#判断当前好友是否为需拜年对象
if id in contact.keys():
msg = contact[id] + '新年快乐'
send_msg({'msg_type': 'private', 'number': id, 'msg': msg}) #
print(contact[id], ': success')
break
else:
time.sleep(1)