前言 今天早上起来出去锻炼,公交车上闲来无事,刷空间,看到朋友打王者被骂,对面叫嚣加QQ要喷爆他,不能忍!回家后拿起电脑就开始敲,写了这个祖安神器准备帮朋友一把。
准备工作 先得准备语料,咱这不会骂人,也没积累啥语料,网上找找吧。先百度一下祖安,找到这个“骂人宝典” ,顺手嫖了一个api,正写着,发现api有访问频率的限制,咱是去对线,速度慢可不行呀(滑稽)。果断改变方法,github上搜祖安看能不能找到别人的库
果然不出所料,找到了这个
脏话爬取\垃圾话\祖安对线\quicker动作
下载其中的 sql.sql 文件,导入自己的mysql中,语料准备完成。
用到的功能 监听键盘快捷键pynput
模拟键盘按键 pykeyboard
多线程 threading
操作剪贴板 pyperclip
代码实现 从数据库读数据 为了减少连接数据库的时间消耗,采用封装的方法一次性连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class SQL : def __init__ (self) : user = '' password = '' self.db = pymysql.connect('localhost' , user, password, 'zanghua' , charset='utf8' ) self.cursor = self.db.cursor() random.seed(a=None , version=2 ) def get_zuan (self, name='' , id=0 , level=1 ) : table = 'lajihuamin' max_id = 416 if level == 2 : table = 'lajihuamax' max_id = 690 if not id: id = random.randint(1 , max_id) sql = 'select msg from %s where id=%d' % (table, id) self.cursor.execute(sql) res = self.cursor.fetchall()[0 ][0 ] if name is not '' : res = res.replace('xx' , name) res = re.sub(r'^\n' , '' , res) res = re.sub(r'(.*)' , '' , res) res = re.sub(r'\n$' , '' , res) return res
创建线程 1 2 3 4 def create_thread (target, args=() , thread_num=5 ) : for i in range(thread_num): t = threading.Thread(target=target, args=args) t.start()
发送消息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def send_zuan (sleep_time, name='' , id=0 , level=1 ) : sql = SQL() def send () : res = sql.get_zuan(name=name, id=id, level=level) lock.acquire() pyperclip.copy(res) print(res) k = PyKeyboard() k.press_keys([k.control_r_key, 'v' ]) k.press_keys([k.control_r_key, k.enter_key]) lock.release() while True : if flag: send() if sleep_time: time.sleep(sleep_time)
监听快捷键(我这里设置的是 左Ctrl
+ B
) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def listening_keykoard () : pressed = set() def on_press (key) : pressed.add(key) global flag if pressed == {keyboard.Key.ctrl_l, keyboard.KeyCode(char="\x02" )}: if flag: print('stop' ) flag = 0 else : print("begin" ) flag = 1 def on_release (key) : if key in pressed: pressed.remove(key) print("start up" ) with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join() print("shutdown" )
最后,启动 1 2 3 4 5 6 7 8 9 10 11 12 if __name__ == "__main__" : create_thread(target=send_zuan, args=(0.1 ,), thread_num=1 ) threading.Thread(target=listening_keykoard).start()
github 项目地址: https://github.com/Roc136/zuan
欢迎star~
展示: your browser does not support the video tag
结语: 当然最后没有和对方对线,毕竟狗咬咱一口咱没必要还一口~
写这个纯属娱乐和学习新知识,但是祖安可不好哦~