├── EZ.jpg ├── README.md ├── cao.py ├── caozuo.py ├── marenyongde.py ├── yangshi.py └── yunxing.py /EZ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lovelearningxi/WHATFUCK/fafda1ae6889a15d3455289083c31dff2f45b6d9/EZ.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WHATFUCK 2 | 3 | 自动骂人工具 4 | 5 | 拥有武器是为了在遇到危险时,能够自保反击,而不是为了主动伤害他人! 6 | 7 | 如果觉得有意思请star 8 | 9 |
双击 yunxing.pyw运行,开启后点击要发送的文本框,自动发送(发送按键默认为回车键)
18 |功能: 可选择夸人、骂人,句子可从文本文档导入,也可直接用骂人网站里的句子(发送速度取决于网站回复速度 建议速度设置为0.1s)
19 | 20 | 21 | 22 | 23 | 24 | 转载自https://github.com/turnflowerdown/superFuck 25 | 26 | 修复了之前的网站失效的问题,并且优化了代码,感谢微风花落 27 | 28 | - Be modified by lovelearningxi. 29 | - 2020.12.10# WHATFUCK 30 | -------------------------------------------------------------------------------- /cao.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2020/12/10 09:07 4 | # @Author : WangXi 5 | # @File : cao.py 6 | # @Software: PyCharm 7 | import sys 8 | from queue import Queue 9 | from threading import Thread 10 | from time import sleep 11 | 12 | from PyQt5.QtWidgets import QFileDialog, QMessageBox 13 | 14 | from caozuo import Loop 15 | from yangshi import MainWindow_style, SetTimeWindow_style 16 | 17 | 18 | class MainWindow(MainWindow_style): 19 | def __init__(self): 20 | super().__init__() 21 | self.connect() 22 | self.init() 23 | self.show() 24 | self.list = ['骂人', '彩虹屁', '渣男语录', '毒鸡汤'] 25 | self.i = 0 26 | 27 | def init(self): # 初始化参数 28 | self.dirs = None # 字典 29 | self.time = 0.1 # 时间间隔 30 | self.timewindow = None 31 | self.loop = None 32 | self.thread = None 33 | self.queue = Queue() 34 | 35 | def connect(self): # 连接槽 36 | self.btn1.clicked.connect(self.open_file) 37 | self.btn2.clicked.connect(self.setTime) 38 | self.btn3.clicked.connect(self.setType) 39 | self.btn4.clicked.connect(self.setType1) 40 | self.btn5.clicked.connect(self.run) 41 | self.btn6.clicked.connect(self.change) 42 | 43 | # 以下为槽函数 44 | def open_file(self): 45 | filepath, filetype = QFileDialog.getOpenFileName(self, '选择字典', sys.path[0], "文本文件(*.txt);;所有文件(*)") 46 | if filepath: 47 | with open(filepath, 'r', encoding='utf8') as f: 48 | self.dirs = f.read().split('\n') 49 | self.btn4.setEnabled(True) # 设置可使用字典发送 50 | 51 | def setTime(self): 52 | self.timewindow = SetTimeWindow(self) 53 | 54 | def setType(self): 55 | self.btn6.setText(self.list[self.i]) 56 | self.btn6.setEnabled(True) 57 | 58 | def setType1(self): 59 | self.btn6.setText('字典发送') 60 | self.btn6.setEnabled(False) 61 | 62 | def run(self): 63 | if self.btn5.text() == '发送': 64 | self.btn5.setText('停止') 65 | while self.queue.empty() == False: 66 | self.queue.get() 67 | self.btn6.setEnabled(False) 68 | if self.btn3.isChecked(): # 网站发送 69 | self.loop = Loop('网站', self.time, self.queue, self.btn6.text(), self.dirs) 70 | else: 71 | self.loop = Loop('字典', self.time, self.queue, self.dirs) 72 | self.thread = Thread(target=self.loop.run, name='loop_run', args=()) 73 | self.thread.start() 74 | sleep(0.1) 75 | if self.thread.is_alive() == False: 76 | QMessageBox.warning(self, 'Message', '请检查网络连接', QMessageBox.Yes) 77 | self.btn5.setText('发送') 78 | self.btn6.setEnabled(True) 79 | else: 80 | self.btn5.setText('发送') 81 | self.btn6.setEnabled(True) 82 | self.queue.put(1) 83 | 84 | def change(self): 85 | self.i = self.i + 1 86 | self.i = self.i % len(self.list) 87 | self.btn6.setText(self.list[self.i]) 88 | 89 | def closeEvent(self, event): # 重写关闭窗口操作 90 | # 关闭子窗口 91 | self.queue.put(1) 92 | if self.timewindow: 93 | self.timewindow.close() 94 | 95 | 96 | class SetTimeWindow(SetTimeWindow_style): 97 | def __init__(self, parent): 98 | super().__init__() 99 | self.parent = parent 100 | self.list = [0.1, 0.5, 1, 2] 101 | for i in range(0, 4): 102 | if self.btn[i].text()[0:-1] == str(self.parent.time): 103 | self.btn[i].setChecked(True) 104 | 105 | def closeEvent(self, event): 106 | for i in range(0, 4): 107 | if self.btn[i].isChecked(): 108 | self.parent.time = self.list[i] 109 | break 110 | -------------------------------------------------------------------------------- /caozuo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2020/12/10 09:06 4 | # @Author : WangXi 5 | # @File : caozuo.py 6 | # @Software: PyCharm 7 | 8 | from time import sleep 9 | 10 | from pynput.keyboard import Key, Controller # 键盘操作 11 | from pyperclip import copy # 剪切板操作 12 | 13 | from marenyongde import Fuck 14 | 15 | 16 | class Loop: 17 | def __init__(self, flag, time, queue, type=None, dirs=None): 18 | self.flag = flag 19 | self.dirs = dirs 20 | self.time = time 21 | self.queue = queue 22 | self.fuck = Fuck(type) 23 | self.k = Controller() 24 | 25 | def run(self): 26 | while True: 27 | if self.queue.empty() == False: 28 | return 29 | if self.flag == '网站': 30 | try: 31 | str = self.fuck.run() 32 | except Exception: 33 | return 34 | self.out(str) 35 | sleep(self.time) 36 | elif self.flag == '字典': 37 | for one in self.dirs: 38 | if self.queue.empty() == False: 39 | return 40 | self.out(one) 41 | sleep(self.time) 42 | 43 | def out(self, str): 44 | copy(str) 45 | self.ctrl_v_enter() 46 | 47 | def ctrl_v_enter(self): 48 | with self.k.pressed(Key.ctrl): 49 | self.k.press('v') 50 | self.k.release('v') 51 | self.k.press(Key.enter) 52 | self.k.release(Key.enter) -------------------------------------------------------------------------------- /marenyongde.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2020/12/10 09:05 4 | # @Author : WangXi 5 | # @File : marenyongde.py 6 | # @Software: PyCharm 7 | 8 | import requests 9 | import os 10 | import json 11 | from lxml import etree 12 | 13 | 14 | class Fuck: 15 | def __init__(self, type): 16 | self.headers = { 17 | "method": "GET", 18 | "path": "/api.php", 19 | "scheme": "https", 20 | "accept": "*/*", 21 | "accept-encoding": "gzip, deflate, br", 22 | "accept-language": "zh-CN,zh;q=0.9", 23 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400", 24 | "x-requested-with": "XMLHttpRequest", 25 | } 26 | self.type = type 27 | if type == '骂人': 28 | self.url = 'https://zuanbot.com/api.php?level=min&lang=zh_cn' 29 | self.headers["authority"] = "zuanbot.com" 30 | self.headers["referer"] = "https://zuanbot.com/" 31 | elif type == '渣男语录': 32 | self.url = 'https://api.lovelive.tools/api/SweetNothings/1/Serialization/Json' 33 | self.headers["path"] = "/api/SweetNothings/1/Serialization/Json" 34 | self.headers["referer"] = "https://lovelive.tools/" 35 | self.headers["origin"] = "https://lovelive.tools" 36 | elif type == '毒鸡汤': 37 | self.url = 'https://8zt.cc/' 38 | self.headers["path"] = "/" 39 | elif type == '彩虹屁': 40 | self.url = 'https://chp.shadiao.app/api.php' 41 | self.headers["authority"] = "chp.shadiao.app" 42 | self.headers["referer"] = "https://chp.shadiao.app/" 43 | requests.packages.urllib3.disable_warnings() # 忽视ssl警告 44 | 45 | def run(self): 46 | if self.type == '渣男语录': 47 | response = json.loads(requests.get(url=self.url, headers=self.headers).text)["returnObj"][0] 48 | elif self.type == '毒鸡汤': 49 | response = requests.get(url=self.url, headers=self.headers).text 50 | tree = etree.HTML(response.replace("\\n", '').replace("\\", '')) 51 | response = tree.xpath("//span/text()")[0].replace(' ', '') 52 | else: 53 | response = requests.get(url=self.url, headers=self.headers, verify=False).text # 取消验证ssl 54 | return response 55 | 56 | 57 | if __name__ == "__main__": 58 | print(Fuck('毒鸡汤').run()) 59 | os.system('pause') 60 | -------------------------------------------------------------------------------- /yangshi.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2020/12/10 09:06 4 | # @Author : WangXi 5 | # @File : yangshi.py 6 | # @Software: PyCharm 7 | 8 | import sys 9 | from PyQt5.QtWidgets import QMainWindow, QDesktopWidget, QPushButton, QVBoxLayout, QHBoxLayout, QWidget, QRadioButton, \ 10 | QButtonGroup, QLabel 11 | from PyQt5.QtCore import Qt 12 | 13 | 14 | class MainWindow_style(QMainWindow): 15 | def __init__(self): 16 | super().__init__() 17 | self.setWindowTitle('宇宙骂人小工具') 18 | self.center() 19 | self.resize(400, 200) 20 | self.show_btn() 21 | 22 | # self.statusBar()#显示状态栏 23 | def center(self): # 设置窗口居中 24 | box = self.frameGeometry() # 获取当前盒子的信息 25 | window_center = QDesktopWidget().availableGeometry().center() 26 | box.moveCenter(window_center) 27 | self.move(box.topLeft()) 28 | 29 | def show_btn(self): # 设置按钮 30 | self.btn1 = QPushButton('设置字典') # 设置字典 31 | self.btn2 = QPushButton('设置发送速度') # 设置发送速度 32 | self.btn3 = QRadioButton('网站') # 设置发送源 33 | self.btn4 = QRadioButton('字典') # 设置发送源 34 | self.btn5 = QPushButton('发送') # 开始发送 35 | self.btn6 = QPushButton('骂人') 36 | hbox = QHBoxLayout() 37 | hbox1 = QHBoxLayout() 38 | hbox2 = QHBoxLayout() 39 | vbox1 = QVBoxLayout() 40 | vbox2 = QVBoxLayout() 41 | 42 | vbox1.addWidget(self.btn1) 43 | vbox1.addWidget(self.btn2) 44 | 45 | hbox1.addWidget(self.btn3) 46 | self.btn3.setChecked(True) # 设置默认选中 47 | hbox1.addWidget(self.btn4) 48 | self.btn4.setEnabled(False) # 设置无法选择 49 | vbox2.addLayout(hbox1) 50 | 51 | hbox2.addWidget(QLabel('当前状态:')) 52 | hbox2.addWidget(self.btn6) 53 | vbox2.addLayout(hbox2) 54 | 55 | vbox2.addWidget(self.btn5) 56 | hbox.addLayout(vbox1) 57 | hbox.addStretch() # 设置中间的占位控件 58 | hbox.addLayout(vbox2) 59 | hbox.setContentsMargins(50, 0, 50, 0) # 设置hbox控件的外边距 左上右下 60 | center_window = QWidget() 61 | center_window.setLayout(hbox) 62 | self.setCentralWidget(center_window) 63 | 64 | 65 | class SetTimeWindow_style(QWidget): 66 | def __init__(self): 67 | super().__init__() 68 | self.center() 69 | self.btn = [] 70 | self.btn.append(QRadioButton("0.1s")) 71 | self.btn.append(QRadioButton("0.5s")) 72 | self.btn.append(QRadioButton("1s")) 73 | self.btn.append(QRadioButton("2s")) 74 | vbox = QVBoxLayout() 75 | vbox.addWidget(self.btn[0]) 76 | self.btn[0].setChecked(True) 77 | vbox.addWidget(self.btn[1]) 78 | vbox.addWidget(self.btn[2]) 79 | vbox.addWidget(self.btn[3]) 80 | self.setLayout(vbox) 81 | self.setWindowTitle('选择发送间隔') 82 | self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint | Qt.WindowStaysOnTopHint) 83 | self.resize(200, 120) 84 | self.show() 85 | 86 | def center(self): # 设置窗口居中 87 | box = self.frameGeometry() # 获取当前盒子的信息 88 | window_center = QDesktopWidget().availableGeometry().center() 89 | box.moveCenter(window_center) 90 | self.move(box.topLeft()) -------------------------------------------------------------------------------- /yunxing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2020/12/10 09:08 4 | # @Author : WangXi 5 | # @File : yunxing.py 6 | # @Software: PyCharm 7 | 8 | import sys 9 | 10 | from PyQt5.QtWidgets import QApplication 11 | 12 | from cao import MainWindow 13 | 14 | app = QApplication(sys.argv) 15 | mw = MainWindow() 16 | sys.exit(app.exec_()) 17 | --------------------------------------------------------------------------------