mirror of
https://github.com/hyper-neptune/yuuki.git
synced 2024-12-26 23:00:50 +08:00
v6.5.3-alpha with Re-format
This commit is contained in:
parent
f26ac3d649
commit
01927d09ba
12 changed files with 233 additions and 65 deletions
136
.gitignore
vendored
Normal file
136
.gitignore
vendored
Normal file
|
@ -0,0 +1,136 @@
|
|||
# Star Yuuki BOT Runtime Data
|
||||
data/
|
||||
logs/
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
pip-wheel-metadata/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# Pycharm
|
||||
.idea/
|
|
@ -1,4 +1,4 @@
|
|||
from .yuuki import Yuuki, Yuuki_Settings
|
||||
from .connection import Yuuki_Connection
|
||||
from .yuuki import Yuuki, Yuuki_Settings
|
||||
|
||||
__all__ = ['Yuuki', "Yuuki_Settings", 'Yuuki_Connection']
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
#!/usr/bin/python3
|
||||
# coding=UTF-8
|
||||
|
||||
from .core.TalkService import Client
|
||||
|
||||
from thrift.transport import THttpClient
|
||||
from thrift.protocol import TCompactProtocol
|
||||
from thrift.transport import THttpClient
|
||||
|
||||
from .core.TalkService import Client
|
||||
|
||||
""" NC HightSpeed Lib """
|
||||
try:
|
||||
from thrift.protocol import fastbinary
|
||||
except:
|
||||
fastbinary = None
|
||||
|
||||
|
||||
##########################################
|
||||
|
||||
class Yuuki_Connection:
|
||||
|
@ -28,6 +30,7 @@ class Yuuki_Connection:
|
|||
"User-Agent": ""
|
||||
}
|
||||
|
||||
|
||||
class Yuuki_Connect:
|
||||
def __init__(self, Yuuki_Connection):
|
||||
|
||||
|
|
56
libs/data.py
56
libs/data.py
|
@ -1,18 +1,18 @@
|
|||
#!/usr/bin/python3
|
||||
# coding=UTF-8
|
||||
|
||||
import \
|
||||
os, \
|
||||
time,\
|
||||
json, \
|
||||
random,\
|
||||
requests
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
from .core.ttypes import OpType
|
||||
|
||||
from .data_mds import listen as msd_listen
|
||||
|
||||
from .thread_control import Yuuki_Thread
|
||||
from .thread_control import Yuuki_Multiprocess
|
||||
from .thread_control import Yuuki_Thread
|
||||
|
||||
|
||||
class Yuuki_Data:
|
||||
def __init__(self, threading):
|
||||
|
@ -24,30 +24,30 @@ class Yuuki_Data:
|
|||
self.Data = {}
|
||||
|
||||
self.DataType = {
|
||||
"Global":{
|
||||
"LastResetLimitTime":None,
|
||||
"Global": {
|
||||
"LastResetLimitTime": None,
|
||||
},
|
||||
"Group": {},
|
||||
"LimitInfo":{},
|
||||
"BlackList":[]
|
||||
"LimitInfo": {},
|
||||
"BlackList": []
|
||||
}
|
||||
|
||||
self.GroupType = {
|
||||
"SEGroup":None,
|
||||
"Ext_Admin":[],
|
||||
"GroupTicket":{}
|
||||
"SEGroup": None,
|
||||
"Ext_Admin": [],
|
||||
"GroupTicket": {}
|
||||
}
|
||||
|
||||
self.LimitType = {
|
||||
"KickLimit":{},
|
||||
"CancelLimit":{}
|
||||
"KickLimit": {},
|
||||
"CancelLimit": {}
|
||||
}
|
||||
|
||||
self.SEGrouptype = {
|
||||
OpType.NOTIFIED_UPDATE_GROUP:False,
|
||||
OpType.NOTIFIED_INVITE_INTO_GROUP:False,
|
||||
OpType.NOTIFIED_ACCEPT_GROUP_INVITATION:False,
|
||||
OpType.NOTIFIED_KICKOUT_FROM_GROUP:False
|
||||
OpType.NOTIFIED_UPDATE_GROUP: False,
|
||||
OpType.NOTIFIED_INVITE_INTO_GROUP: False,
|
||||
OpType.NOTIFIED_ACCEPT_GROUP_INVITATION: False,
|
||||
OpType.NOTIFIED_KICKOUT_FROM_GROUP: False
|
||||
}
|
||||
|
||||
self.DataPath = "data/"
|
||||
|
@ -105,10 +105,10 @@ class Yuuki_Data:
|
|||
# Log
|
||||
|
||||
self.LogType = {
|
||||
"JoinGroup":"<li>%s: %s(%s) -> Inviter: %s</li>",
|
||||
"KickEvent":"<li>%s: %s(%s) -(%s)> Kicker: %s | Kicked: %s | Status: %s</li>",
|
||||
"CancelEvent":"<li>%s: %s(%s) -(%s)> Inviter: %s | Canceled: %s</li>",
|
||||
"BlackList":"<li>%s: %s(%s)</li>"
|
||||
"JoinGroup": "<li>%s: %s(%s) -> Inviter: %s</li>",
|
||||
"KickEvent": "<li>%s: %s(%s) -(%s)> Kicker: %s | Kicked: %s | Status: %s</li>",
|
||||
"CancelEvent": "<li>%s: %s(%s) -(%s)> Inviter: %s | Canceled: %s</li>",
|
||||
"BlackList": "<li>%s: %s(%s)</li>"
|
||||
}
|
||||
|
||||
self.LogPath = "logs/"
|
||||
|
@ -150,7 +150,7 @@ class Yuuki_Data:
|
|||
assert over["status"] == 200, assert_result
|
||||
return over
|
||||
else:
|
||||
status = {"status" : 0}
|
||||
status = {"status": 0}
|
||||
return json.dumps(status)
|
||||
|
||||
def _local_query(self, query_data):
|
||||
|
@ -189,7 +189,7 @@ class Yuuki_Data:
|
|||
for Type in self.DataType:
|
||||
with self.file(Type, "w", "Data") as f:
|
||||
f.write(json.dumps(self.Data[Type]))
|
||||
return self.getData(["Global","Power"])
|
||||
return self.getData(["Global", "Power"])
|
||||
|
||||
def updateData(self, path, data):
|
||||
if self.threading:
|
||||
|
|
|
@ -19,32 +19,36 @@ from tornado.web import Application, RequestHandler
|
|||
switch_data = {}
|
||||
auth_code = 0
|
||||
|
||||
|
||||
# Functions
|
||||
def mds_exit(null=None, null_=None):
|
||||
exit(0)
|
||||
|
||||
|
||||
def update(path, data):
|
||||
global switch_data
|
||||
try:
|
||||
if type(path) is list:
|
||||
over = query(path)
|
||||
over.get("data").update(data)
|
||||
return {"status" : 200}
|
||||
return {"status" : 400}
|
||||
return {"status": 200}
|
||||
return {"status": 400}
|
||||
except:
|
||||
return {"status": 500}
|
||||
|
||||
|
||||
def delete(path, data):
|
||||
global switch_data
|
||||
try:
|
||||
if type(path) is list:
|
||||
over = query(path)
|
||||
over.get("data").pop(data)
|
||||
return {"status" : 200}
|
||||
return {"status" : 400}
|
||||
return {"status": 200}
|
||||
return {"status": 400}
|
||||
except:
|
||||
return {"status": 500}
|
||||
|
||||
|
||||
def query(query_data, null=None):
|
||||
global switch_data
|
||||
try:
|
||||
|
@ -55,34 +59,37 @@ def query(query_data, null=None):
|
|||
if key in result:
|
||||
if count < query_len:
|
||||
if type(result.get(key)) is not dict:
|
||||
result = 1 #"unknown_type" + type(source_data.get(key))
|
||||
result = 1 # "unknown_type" + type(source_data.get(key))
|
||||
break
|
||||
result = result.get(key)
|
||||
else:
|
||||
result = 2 #"unknown_key"
|
||||
result = 2 # "unknown_key"
|
||||
break
|
||||
|
||||
return {"status" : 200, "data" : result}
|
||||
return {"status" : 400}
|
||||
return {"status": 200, "data": result}
|
||||
return {"status": 400}
|
||||
except:
|
||||
return {"status": 500}
|
||||
|
||||
|
||||
def sync(path, null=None):
|
||||
global switch_data
|
||||
try:
|
||||
switch_data = path
|
||||
return {"status" : 200}
|
||||
return {"status": 200}
|
||||
except:
|
||||
return {"status": 500}
|
||||
|
||||
|
||||
def yuukiLimitDecrease(path, userId):
|
||||
global switch_data
|
||||
try:
|
||||
switch_data["LimitInfo"][path][userId] -= 1
|
||||
return {"status" : 200}
|
||||
return {"status": 200}
|
||||
except:
|
||||
return {"status": 500}
|
||||
|
||||
|
||||
# Works
|
||||
_work = {
|
||||
"EXT": mds_exit,
|
||||
|
@ -93,6 +100,7 @@ _work = {
|
|||
"YLD": yuukiLimitDecrease
|
||||
}
|
||||
|
||||
|
||||
class IndexHandler(RequestHandler):
|
||||
def get(self):
|
||||
self.write('''
|
||||
|
@ -109,16 +117,17 @@ class IndexHandler(RequestHandler):
|
|||
if req_res.get("code") == auth_code:
|
||||
result = _work[req_res.get("do")](req_res.get("path"), req_res.get("data"))
|
||||
else:
|
||||
result = {"status" : 401}
|
||||
result = {"status": 401}
|
||||
if not result:
|
||||
result = {"status" : 500}
|
||||
result = {"status": 500}
|
||||
self.write(json.dumps(result))
|
||||
|
||||
|
||||
# Main
|
||||
def listen(code):
|
||||
global auth_code
|
||||
auth_code = code
|
||||
app = Application([('/',IndexHandler)])
|
||||
app = Application([('/', IndexHandler)])
|
||||
server = HTTPServer(app)
|
||||
server.listen(2019)
|
||||
IOLoop.current().start()
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
from .en import English
|
||||
from .zh_TW import Traditional_Chinese
|
||||
|
||||
|
||||
class Yuuki_LangSetting:
|
||||
def __init__(self, default):
|
||||
self.default = default
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
The software licensed under Mozilla Public License Version 2.0
|
||||
"""
|
||||
|
||||
class English:
|
||||
|
||||
class English:
|
||||
i18nText = {
|
||||
"Helllo^^\nMy name is %s ><\nNice to meet you OwO": "Helllo^^\nMy name is %s ><\nNice to meet you OwO",
|
||||
"Type:\n\t%s/Help\nto get more information\n\nMain Admin of the Group:\n%s": "Type:\n\t%s/Help\nto get more information\n\nMain Admin of the Group:\n%s",
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
The software licensed under Mozilla Public License Version 2.0
|
||||
"""
|
||||
|
||||
class Traditional_Chinese:
|
||||
|
||||
class Traditional_Chinese:
|
||||
i18nText = {
|
||||
"Helllo^^\nMy name is %s ><\nNice to meet you OwO": "安安^^\n我是%s呦><\n請多多指教OwO",
|
||||
"Type:\n\t%s/Help\nto get more information\n\nMain Admin of the Group:\n%s": "請輸入:\n\t%s/Help\n以獲得更多資訊\n\n本群組主管理員為:\n%s",
|
||||
|
|
12
libs/sync.py
Normal file
12
libs/sync.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/python3
|
||||
# coding=UTF-8
|
||||
|
||||
from simplegist.simplegist import Simplegist
|
||||
|
||||
|
||||
class Yuuki_Sync:
|
||||
def __init__(self):
|
||||
self.client = Simplegist(username='USERNAME', api_token='API_TOKEN')
|
||||
|
||||
def initialize(self):
|
||||
pass
|
|
@ -1,7 +1,9 @@
|
|||
#!/usr/bin/python3
|
||||
# coding=UTF-8
|
||||
|
||||
import threading, multiprocessing
|
||||
import multiprocessing
|
||||
import threading
|
||||
|
||||
|
||||
class Yuuki_Thread:
|
||||
def __init__(self):
|
||||
|
@ -16,6 +18,7 @@ class Yuuki_Thread:
|
|||
print(threading.enumerate())
|
||||
print("{} add Threading\n".format(threading.current_thread()))
|
||||
|
||||
|
||||
class Yuuki_Multiprocess:
|
||||
def add(self, Yuuki_Func, args=()):
|
||||
added_multiprocess = multiprocessing.Process(name=Yuuki_Func.__name__, target=Yuuki_Func, args=args)
|
||||
|
|
|
@ -6,11 +6,11 @@ import ntpath
|
|||
import os
|
||||
import platform
|
||||
import random
|
||||
import requests
|
||||
import socket
|
||||
import time
|
||||
import traceback
|
||||
|
||||
import requests
|
||||
from git import Repo
|
||||
|
||||
try:
|
||||
|
@ -469,7 +469,7 @@ class Yuuki:
|
|||
RECEIVE_MESSAGE (26)
|
||||
"""
|
||||
BlockedIgnore = (ncMessage.message.to in self.data.getData(["BlackList"])) or (
|
||||
ncMessage.message.from_ in self.data.getData(["BlackList"]))
|
||||
ncMessage.message.from_ in self.data.getData(["BlackList"]))
|
||||
if ('BOT_CHECK' in ncMessage.message.contentMetadata) or BlockedIgnore:
|
||||
pass
|
||||
elif ncMessage.message.toType == MIDType.ROOM:
|
||||
|
@ -727,7 +727,7 @@ class Yuuki:
|
|||
Kicker = self.kickSomeone(GroupInfo, Action)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another, ncMessage.type))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another, ncMessage.type))
|
||||
elif ncMessage.type == OpType.NOTIFIED_INVITE_INTO_GROUP and Security_Access:
|
||||
Canceler = "None"
|
||||
if "\x1e" in Another:
|
||||
|
@ -739,11 +739,11 @@ class Yuuki:
|
|||
Canceler = self.kickSomeone(GroupInfo, userId)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, userId,
|
||||
ncMessage.type * 10))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, userId,
|
||||
ncMessage.type * 10))
|
||||
# Log
|
||||
self.data.updateLog("CancelEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, Another.replace("\x1e", ",")))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, Another.replace("\x1e", ",")))
|
||||
elif Another not in self.AllAccountIds + GroupPrivilege:
|
||||
if GroupInfo.invitee and Another in [user.mid for user in GroupInfo.invitee]:
|
||||
Canceler = self.cancelSomeone(GroupInfo, Another)
|
||||
|
@ -751,7 +751,8 @@ class Yuuki:
|
|||
Canceler = self.kickSomeone(GroupInfo, Another)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, Another, ncMessage.type * 10))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, Another,
|
||||
ncMessage.type * 10))
|
||||
# Log
|
||||
self.data.updateLog("CancelEvent",
|
||||
(self.data.getTime(), GroupInfo.name, GroupID, Canceler, Action, Another))
|
||||
|
@ -764,19 +765,20 @@ class Yuuki:
|
|||
Kicker = self.kickSomeone(GroupInfo, Action)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Kicker, Action, ncMessage.type))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Kicker, Action, ncMessage.type))
|
||||
elif ncMessage.type == OpType.NOTIFIED_KICKOUT_FROM_GROUP:
|
||||
if Action in self.Connect.helper_ids:
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Action, Action, Another, ncMessage.type * 10 + 1))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Action, Action, Another, ncMessage.type * 10 + 1))
|
||||
elif Another in self.AllAccountIds:
|
||||
Kicker = "None"
|
||||
try:
|
||||
Kicker = self.kickSomeone(GroupInfo, Action, Another)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another, ncMessage.type * 10 + 2))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another,
|
||||
ncMessage.type * 10 + 2))
|
||||
assert Kicker != "None", "No Helper Found"
|
||||
if GroupInfo.preventJoinByTicket:
|
||||
self.Thread_Exec(self.changeGroupUrlStatus, (GroupInfo, True, Kicker))
|
||||
|
@ -803,7 +805,8 @@ class Yuuki:
|
|||
self.data.updateData(["Global", "GroupJoined"], NewGroupList)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another, ncMessage.type * 10 + 3))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another,
|
||||
ncMessage.type * 10 + 3))
|
||||
BlackList = self.data.getData(["BlackList"])
|
||||
if Action not in BlackList:
|
||||
NewBlackList = BlackList.copy()
|
||||
|
@ -817,7 +820,7 @@ class Yuuki:
|
|||
Kicker = self.kickSomeone(GroupInfo, Action)
|
||||
# Log
|
||||
self.data.updateLog("KickEvent", (
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another, ncMessage.type))
|
||||
self.data.getTime(), GroupInfo.name, GroupID, Kicker, Action, Another, ncMessage.type))
|
||||
self.Thread_Exec(self.sendText, (GroupID, _("The one who was been kicked:")))
|
||||
self.Thread_Exec(self.sendUser, (GroupID, Another))
|
||||
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
certifi==2019.9.11
|
||||
simplegist==1.0.1
|
||||
certifi==2019.11.28
|
||||
chardet==3.0.4
|
||||
gitdb2==2.0.6
|
||||
GitPython==3.0.3
|
||||
GitPython==3.0.5
|
||||
idna==2.8
|
||||
requests==2.22.0
|
||||
six==1.12.0
|
||||
six==1.13.0
|
||||
smmap2==2.0.5
|
||||
thrift==0.11.0
|
||||
thrift==0.13.0
|
||||
tornado==6.0.3
|
||||
urllib3==1.25.6
|
||||
urllib3==1.25.7
|
||||
|
|
Loading…
Reference in a new issue