mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-10 02:09:26 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe04e02e88 | ||
|
|
93554332a7 | ||
|
|
b541c7e1b7 | ||
|
|
1dec1a286a | ||
|
|
b17510104d | ||
|
|
c2c8ea0ce6 | ||
|
|
acbdb013ae | ||
|
|
b025f21765 | ||
|
|
1afc8a69e5 | ||
|
|
743fc9e8d3 | ||
|
|
8d692d2b3b | ||
|
|
a0b362e691 | ||
|
|
98e1c2ae8f | ||
|
|
c0e5915285 | ||
|
|
667a0fd0fd | ||
|
|
8ed5f283b0 | ||
|
|
643c370d30 | ||
|
|
4601303065 | ||
|
|
14940d6734 | ||
|
|
fdc2b0f5c4 | ||
|
|
cf0b233f63 | ||
|
|
b3a7ef2206 | ||
|
|
9a3ca3e833 | ||
|
|
9afff8df3f | ||
|
|
ccd0b06223 | ||
|
|
7b495fe9bf | ||
|
|
2c3fb75e8f | ||
|
|
53b606602f | ||
|
|
ecef0cf994 | ||
|
|
3691d41b23 | ||
|
|
1f66457a3e | ||
|
|
8e05beccfd | ||
|
|
35424eae1f | ||
|
|
ed6df6d527 | ||
|
|
4366c4afde | ||
|
|
4bb059f62f | ||
|
|
aa8f618d9c | ||
|
|
dfd753e4c1 | ||
|
|
e38daf3c89 | ||
|
|
535838fc5e | ||
|
|
797853bd61 | ||
|
|
0de3aff045 | ||
|
|
0b7b48ab23 | ||
|
|
5ff0a0bfbc | ||
|
|
9131f44d67 | ||
|
|
6b86bb9d2b | ||
|
|
dc06d6beda | ||
|
|
2c8ea2498e | ||
|
|
6b01173b61 | ||
|
|
883c554850 | ||
|
|
d267da351c | ||
|
|
13a39f4d6a |
@@ -177,3 +177,5 @@ debug.out
|
||||
|
||||
|
||||
|
||||
mdioks.session-journal
|
||||
*.session
|
||||
|
||||
@@ -99,11 +99,11 @@ docker run -itd --name mw-server --privileged=true -p 7200:7200 -p 80:80 -p 443:
|
||||
```
|
||||
|
||||
|
||||
### 版本更新 0.14.1
|
||||
### 版本更新 0.14.2
|
||||
|
||||
* 安装优化。
|
||||
* 加入OP负载均衡插件。
|
||||
* 网站防篡改程序(测试中)。
|
||||
* 加入TgClient插件
|
||||
* 网站防篡改程序(测试中)
|
||||
* Docker(测试中)
|
||||
|
||||
### JSDelivr安装地址
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ from flask import request
|
||||
|
||||
class config_api:
|
||||
|
||||
__version = '0.14.1'
|
||||
__version = '0.14.2'
|
||||
__api_addr = 'data/api.json'
|
||||
|
||||
def __init__(self):
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Executable
+20
@@ -0,0 +1,20 @@
|
||||
<div class="bt-form">
|
||||
<div class='plugin_version'></div>
|
||||
<div class="bt-w-main">
|
||||
<div class="bt-w-menu">
|
||||
<p class="bgw" onclick="pluginService('docker');">服务</p>
|
||||
<p onclick="pluginInitD('docker');">自启动</p>
|
||||
<p onclick="dockerList();">容器列表</p>
|
||||
</div>
|
||||
<div class="bt-w-con pd15">
|
||||
<div class="soft-man-con"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
resetPluginWinWidth(700);
|
||||
resetPluginWinHeight(400);
|
||||
$.getScript( "/plugins/file?name=docker&f=js/docker.js", function(){
|
||||
pluginService('docker', $('.plugin_version').attr('version'));
|
||||
});
|
||||
</script>
|
||||
Executable
+169
@@ -0,0 +1,169 @@
|
||||
# coding:utf-8
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
|
||||
app_debug = False
|
||||
if mw.isAppleSystem():
|
||||
app_debug = True
|
||||
|
||||
|
||||
def getPluginName():
|
||||
return 'docker'
|
||||
|
||||
|
||||
def getPluginDir():
|
||||
return mw.getPluginDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getServerDir():
|
||||
return mw.getServerDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getInitDFile():
|
||||
if app_debug:
|
||||
return '/tmp/' + getPluginName()
|
||||
return '/etc/init.d/' + getPluginName()
|
||||
|
||||
|
||||
def getConf():
|
||||
path = getServerDir() + "/redis.conf"
|
||||
return path
|
||||
|
||||
|
||||
def getConfTpl():
|
||||
path = getPluginDir() + "/config/redis.conf"
|
||||
return path
|
||||
|
||||
|
||||
def getInitDTpl():
|
||||
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
|
||||
return path
|
||||
|
||||
|
||||
def getArgs():
|
||||
args = sys.argv[3:]
|
||||
tmp = {}
|
||||
args_len = len(args)
|
||||
|
||||
if args_len == 1:
|
||||
t = args[0].strip('{').strip('}')
|
||||
if t.strip() == '':
|
||||
tmp = []
|
||||
else:
|
||||
t = t.split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
tmp[t[0]] = t[1]
|
||||
elif args_len > 1:
|
||||
for i in range(len(args)):
|
||||
t = args[i].split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
return tmp
|
||||
|
||||
|
||||
def status():
|
||||
data = mw.execShell(
|
||||
"ps -ef|grep dockerd |grep -v grep | grep -v python | grep -v mdserver-web | awk '{print $2}'")
|
||||
|
||||
if data[0] == '':
|
||||
return 'stop'
|
||||
return 'start'
|
||||
|
||||
|
||||
def initDreplace():
|
||||
return ''
|
||||
|
||||
|
||||
def dockerOp(method):
|
||||
file = initDreplace()
|
||||
|
||||
if not mw.isAppleSystem():
|
||||
data = mw.execShell('systemctl ' + method + ' docker')
|
||||
if data[1] == '':
|
||||
return 'ok'
|
||||
return data[1]
|
||||
return 'fail'
|
||||
|
||||
|
||||
def start():
|
||||
return dockerOp('start')
|
||||
|
||||
|
||||
def stop():
|
||||
return dockerOp('stop')
|
||||
|
||||
|
||||
def restart():
|
||||
status = dockerOp('restart')
|
||||
|
||||
log_file = runLog()
|
||||
mw.execShell("echo '' > " + log_file)
|
||||
return status
|
||||
|
||||
|
||||
def reload():
|
||||
return dockerOp('reload')
|
||||
|
||||
|
||||
def initdStatus():
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
shell_cmd = 'systemctl status ' + \
|
||||
getPluginName() + ' | grep loaded | grep "enabled;"'
|
||||
data = mw.execShell(shell_cmd)
|
||||
if data[0] == '':
|
||||
return 'fail'
|
||||
return 'ok'
|
||||
|
||||
|
||||
def initdInstall():
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
mw.execShell('systemctl enable ' + getPluginName())
|
||||
return 'ok'
|
||||
|
||||
|
||||
def initdUinstall():
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
mw.execShell('systemctl disable ' + getPluginName())
|
||||
return 'ok'
|
||||
|
||||
|
||||
def runLog():
|
||||
return getServerDir() + '/data/redis.log'
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
func = sys.argv[1]
|
||||
if func == 'status':
|
||||
print(status())
|
||||
elif func == 'start':
|
||||
print(start())
|
||||
elif func == 'stop':
|
||||
print(stop())
|
||||
elif func == 'restart':
|
||||
print(restart())
|
||||
elif func == 'reload':
|
||||
print(reload())
|
||||
elif func == 'initd_status':
|
||||
print(initdStatus())
|
||||
elif func == 'initd_install':
|
||||
print(initdInstall())
|
||||
elif func == 'initd_uninstall':
|
||||
print(initdUinstall())
|
||||
elif func == 'conf':
|
||||
print(getConf())
|
||||
elif func == 'run_log':
|
||||
print(runLog())
|
||||
else:
|
||||
print('error')
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"sort": 7,
|
||||
"ps": "Docker 是一个开源的应用容器引擎(开发测试中)",
|
||||
"name": "docker",
|
||||
"title": "Docker",
|
||||
"shell": "install.sh",
|
||||
"versions":["1.0"],
|
||||
"updates":["1.0"],
|
||||
"tip": "soft",
|
||||
"checks": "server/docker",
|
||||
"path": "server/docker",
|
||||
"display": 1,
|
||||
"author": "Zend",
|
||||
"date": "2017-04-01",
|
||||
"home": "https://docker.io",
|
||||
"type": 0,
|
||||
"pid": "2"
|
||||
}
|
||||
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
|
||||
# cd /www/server/mdserver-web/plugins/docker && /bin/bash install.sh uninstall 1.0
|
||||
# cd /www/server/mdserver-web/plugins/docker && /bin/bash install.sh install 1.0
|
||||
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
VERSION=$2
|
||||
|
||||
Install_Docker()
|
||||
{
|
||||
which docker
|
||||
if [ "$?" == "0" ];then
|
||||
echo '安装已经完成docker' > $install_tmp
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo '正在安装脚本文件...' > $install_tmp
|
||||
mkdir -p $serverPath/source
|
||||
|
||||
if [ ! -d $serverPath/docker ];then
|
||||
curl -fsSL https://get.docker.com | bash
|
||||
mkdir -p $serverPath/docker
|
||||
fi
|
||||
|
||||
if [ -d $serverPath/docker ];then
|
||||
echo "${VERSION}" > $serverPath/docker/version.pl
|
||||
echo '安装完成' > $install_tmp
|
||||
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/docker/index.py start
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/docker/index.py initd_install
|
||||
fi
|
||||
}
|
||||
|
||||
Uninstall_Docker()
|
||||
{
|
||||
CMD=yum
|
||||
which apt
|
||||
if [ "$?" == "0" ];then
|
||||
CMD=apt
|
||||
fi
|
||||
|
||||
if [ -f /usr/lib/systemd/system/docker.service ];then
|
||||
systemctl stop docker
|
||||
systemctl disable docker
|
||||
rm -rf /usr/lib/systemd/system/docker.service
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
|
||||
$CMD remove -y docker docker-ce-cli containerd.io
|
||||
# docker-client \
|
||||
# docker-client-latest \
|
||||
# docker-common \
|
||||
# docker-latest \
|
||||
# docker-latest-logrotate \
|
||||
# docker-logrotate \
|
||||
# docker-selinux \
|
||||
# docker-engine-selinux \
|
||||
# docker-engine \
|
||||
# docker-ce
|
||||
|
||||
rm -rf $serverPath/docker
|
||||
echo "Uninstall_Docker" > $install_tmp
|
||||
}
|
||||
|
||||
action=$1
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_Docker
|
||||
else
|
||||
Uninstall_Docker
|
||||
fi
|
||||
Executable
+60
@@ -0,0 +1,60 @@
|
||||
function dPost(method, version, args,callback){
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'docker';
|
||||
req_data['func'] = method;
|
||||
req_data['version'] = version;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(toArrayObject(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/run', req_data, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
//错误展示10S
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function dPostCallbak(method, version, args,callback){
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'docker';
|
||||
req_data['func'] = method;
|
||||
args['version'] = version;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(toArrayObject(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/callback', req_data, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function dockerList(){
|
||||
$(".soft-man-con").html('');
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"install_pre_inspection":true,
|
||||
"uninstall_pre_inspection":true,
|
||||
"display": 1,
|
||||
"author": "midokos",
|
||||
"author": "midoks",
|
||||
"date": "2023-03-06",
|
||||
"home": "https://core.telegram.org/bots/api",
|
||||
"depend_doc1":"https://github.com/eternnoir/pyTelegramBotAPI",
|
||||
|
||||
@@ -46,6 +46,8 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
||||
# CK资源采集 |29/m
|
||||
# 高防服务器CDN请联系玥玥 |3/m
|
||||
|
||||
# https://zhaoziyuan.la/ | 15/m | 2m | next,5/15
|
||||
|
||||
keyboard = [
|
||||
[
|
||||
types.InlineKeyboardButton(
|
||||
@@ -68,6 +70,8 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
||||
text="🙎♂️代实名🙍♀️过人脸🅾️国际阿里云腾讯云(赞助商)", url='https://t.me/gjgzs2022')
|
||||
],
|
||||
[
|
||||
types.InlineKeyboardButton(
|
||||
text="倩倩CDN服务器", url='https://t.me/KLT_12'),
|
||||
types.InlineKeyboardButton(
|
||||
text="💎DigitalVirt(赞助商)", url='https://digitalvirt.com/aff.php?aff=154')
|
||||
],
|
||||
@@ -77,7 +81,9 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
||||
types.InlineKeyboardButton(
|
||||
text="搜索", url='https://bbs.midoks.me/search.php'),
|
||||
types.InlineKeyboardButton(
|
||||
text="@ME", url='tg://user?id=5568699210')
|
||||
text="@ME", url='tg://user?id=5568699210'),
|
||||
types.InlineKeyboardButton(
|
||||
text="100RMB/M", url='tg://user?id=5568699210')
|
||||
]
|
||||
]
|
||||
markup = types.InlineKeyboardMarkup(keyboard)
|
||||
|
||||
@@ -66,6 +66,8 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
||||
text="🙎♂️代实名🙍♀️过人脸🅾️国际阿里云腾讯云(赞助商)", url='https://t.me/gjgzs2022')
|
||||
],
|
||||
[
|
||||
types.InlineKeyboardButton(
|
||||
text="倩倩CDN服务器", url='https://t.me/KLT_12'),
|
||||
types.InlineKeyboardButton(
|
||||
text="💎DigitalVirt(赞助商)", url='https://digitalvirt.com/aff.php?aff=154')
|
||||
],
|
||||
@@ -75,7 +77,9 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
||||
types.InlineKeyboardButton(
|
||||
text="搜索", url='https://bbs.midoks.me/search.php'),
|
||||
types.InlineKeyboardButton(
|
||||
text="@ME", url='tg://user?id=5568699210')
|
||||
text="@ME", url='tg://user?id=5568699210'),
|
||||
types.InlineKeyboardButton(
|
||||
text="100RMB/M", url='tg://user?id=5568699210')
|
||||
]
|
||||
]
|
||||
markup = types.InlineKeyboardMarkup(keyboard)
|
||||
@@ -85,7 +89,7 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
||||
msg = bot.send_message(chat_id, msg_notice, reply_markup=markup)
|
||||
|
||||
# print(msg.message_id)
|
||||
time.sleep(60)
|
||||
time.sleep(90)
|
||||
try:
|
||||
bot.delete_message(
|
||||
chat_id=chat_id, message_id=msg.message_id)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
# coding:utf-8
|
||||
|
||||
import sys
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 974 B |
Executable
+27
@@ -0,0 +1,27 @@
|
||||
<div class="bt-form">
|
||||
<div class='plugin_version'></div>
|
||||
<div class="bt-w-main">
|
||||
<div class="bt-w-menu">
|
||||
<p class="bgw" onclick="pluginService('tgclient');">服务</p>
|
||||
<p onclick="pluginInitD('tgclient');">自启动</p>
|
||||
<p onclick="clientConf();">配置</p>
|
||||
<p onclick="botExtList();">扩展列表</p>
|
||||
<p onclick="pluginLogs('tgclient','','run_log');">日志</p>
|
||||
<p onclick="readme();">说明</p>
|
||||
</div>
|
||||
<div class="bt-w-con pd15">
|
||||
<div class="soft-man-con"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.conf_p span{
|
||||
width: 70px;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
resetPluginWinHeight(350);
|
||||
$.getScript( "/plugins/file?name=tgclient&f=js/tgclient.js", function(){
|
||||
pluginService('tgclient');
|
||||
});
|
||||
</script>
|
||||
Executable
+371
@@ -0,0 +1,371 @@
|
||||
# coding:utf-8
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import json
|
||||
import base64
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
|
||||
app_debug = False
|
||||
if mw.isAppleSystem():
|
||||
app_debug = True
|
||||
|
||||
|
||||
def getPluginName():
|
||||
return 'tgclient'
|
||||
|
||||
|
||||
def getPluginDir():
|
||||
return mw.getPluginDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getServerDir():
|
||||
return mw.getServerDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getInitDFile():
|
||||
if app_debug:
|
||||
return '/tmp/' + getPluginName()
|
||||
return '/etc/init.d/' + getPluginName()
|
||||
|
||||
|
||||
def getConfigData():
|
||||
cfg_path = getServerDir() + "/data.cfg"
|
||||
if not os.path.exists(cfg_path):
|
||||
mw.writeFile(cfg_path, '{}')
|
||||
t = mw.readFile(cfg_path)
|
||||
return json.loads(t)
|
||||
|
||||
|
||||
def writeConf(data):
|
||||
cfg_path = getServerDir() + "/data.cfg"
|
||||
mw.writeFile(cfg_path, json.dumps(data))
|
||||
return True
|
||||
|
||||
|
||||
def getExtCfg():
|
||||
cfg_path = getServerDir() + "/extend.cfg"
|
||||
if not os.path.exists(cfg_path):
|
||||
mw.writeFile(cfg_path, '{}')
|
||||
t = mw.readFile(cfg_path)
|
||||
return json.loads(t)
|
||||
|
||||
|
||||
def writeExtCfg(data):
|
||||
cfg_path = getServerDir() + "/extend.cfg"
|
||||
return mw.writeFile(cfg_path, json.dumps(data))
|
||||
|
||||
|
||||
def getInitDTpl():
|
||||
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
|
||||
return path
|
||||
|
||||
|
||||
def getArgs():
|
||||
args = sys.argv[2:]
|
||||
tmp = {}
|
||||
args_len = len(args)
|
||||
if args_len == 1:
|
||||
t = args[0].strip('{').strip('}')
|
||||
if t.strip() == '':
|
||||
tmp = []
|
||||
else:
|
||||
t = t.split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
tmp[t[0]] = t[1]
|
||||
elif args_len > 1:
|
||||
for i in range(len(args)):
|
||||
t = args[i].split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
return tmp
|
||||
|
||||
|
||||
def checkArgs(data, ck=[]):
|
||||
for i in range(len(ck)):
|
||||
if not ck[i] in data:
|
||||
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
|
||||
return (True, mw.returnJson(True, 'ok'))
|
||||
|
||||
|
||||
def status():
|
||||
data = mw.execShell(
|
||||
"ps -ef|grep tgclient |grep -v grep | grep -v mdserver-web | awk '{print $2}'")
|
||||
if data[0] == '':
|
||||
return 'stop'
|
||||
return 'start'
|
||||
|
||||
|
||||
def initDreplace():
|
||||
|
||||
file_tpl = getInitDTpl()
|
||||
service_path = mw.getServerDir()
|
||||
app_path = service_path + '/' + getPluginName()
|
||||
|
||||
initD_path = getServerDir() + '/init.d'
|
||||
if not os.path.exists(initD_path):
|
||||
os.mkdir(initD_path)
|
||||
file_bin = initD_path + '/' + getPluginName()
|
||||
|
||||
# initd replace
|
||||
# if not os.path.exists(file_bin):
|
||||
content = mw.readFile(file_tpl)
|
||||
content = content.replace('{$SERVER_PATH}', service_path + '/mdserver-web')
|
||||
content = content.replace('{$APP_PATH}', app_path)
|
||||
|
||||
mw.writeFile(file_bin, content)
|
||||
mw.execShell('chmod +x ' + file_bin)
|
||||
|
||||
pyMainTplContent = mw.readFile(getPluginDir() + '/startup/tgclient.py')
|
||||
toPyMainPath = mw.getServerDir() + '/tgclient.py'
|
||||
mw.writeFile(toPyMainPath, pyMainTplContent)
|
||||
|
||||
# systemd
|
||||
systemDir = mw.systemdCfgDir()
|
||||
systemService = systemDir + '/tgclient.service'
|
||||
systemServiceTpl = getPluginDir() + '/init.d/tgclient.service.tpl'
|
||||
if os.path.exists(systemDir) and not os.path.exists(systemService):
|
||||
service_path = mw.getServerDir()
|
||||
se_content = mw.readFile(systemServiceTpl)
|
||||
se_content = se_content.replace('{$APP_PATH}', app_path)
|
||||
mw.writeFile(systemService, se_content)
|
||||
mw.execShell('systemctl daemon-reload')
|
||||
|
||||
return file_bin
|
||||
|
||||
|
||||
def tbOp(method):
|
||||
file = initDreplace()
|
||||
|
||||
if not mw.isAppleSystem():
|
||||
data = mw.execShell('systemctl ' + method + ' ' + getPluginName())
|
||||
if data[1] == '':
|
||||
return 'ok'
|
||||
return data[1]
|
||||
|
||||
data = mw.execShell(file + ' ' + method)
|
||||
# print(data)
|
||||
if data[1] == '':
|
||||
return 'ok'
|
||||
return 'ok'
|
||||
|
||||
|
||||
def start():
|
||||
return tbOp('start')
|
||||
|
||||
|
||||
def stop():
|
||||
return tbOp('stop')
|
||||
|
||||
|
||||
def restart():
|
||||
status = tbOp('restart')
|
||||
return status
|
||||
|
||||
|
||||
def reload():
|
||||
|
||||
tgbot_tpl = getPluginDir() + '/startup/tgclient.py'
|
||||
tgbot_dst = getServerDir() + '/tgclient.py'
|
||||
|
||||
content = mw.readFile(tgbot_tpl)
|
||||
mw.writeFile(tgbot_dst, content)
|
||||
|
||||
ext_src = getPluginDir() + '/startup/extend'
|
||||
ext_dst = getServerDir()
|
||||
|
||||
mw.execShell('cp -rf ' + ext_src + ' ' + ext_dst)
|
||||
|
||||
return tbOp('restart')
|
||||
|
||||
|
||||
def initdStatus():
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
shell_cmd = 'systemctl status ' + \
|
||||
getPluginName() + ' | grep loaded | grep "enabled;"'
|
||||
data = mw.execShell(shell_cmd)
|
||||
if data[0] == '':
|
||||
return 'fail'
|
||||
return 'ok'
|
||||
|
||||
|
||||
def initdInstall():
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
mw.execShell('systemctl enable ' + getPluginName())
|
||||
return 'ok'
|
||||
|
||||
|
||||
def initdUinstall():
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
mw.execShell('systemctl disable ' + getPluginName())
|
||||
return 'ok'
|
||||
|
||||
|
||||
def getClientConf():
|
||||
data = getConfigData()
|
||||
if 'bot' in data:
|
||||
return mw.returnJson(True, 'ok', data['bot'])
|
||||
return mw.returnJson(False, 'ok', {})
|
||||
|
||||
|
||||
def setClientConf():
|
||||
args = getArgs()
|
||||
data_args = checkArgs(args, ['api_id', 'api_hash'])
|
||||
if not data_args[0]:
|
||||
return data_args[1]
|
||||
|
||||
data = getConfigData()
|
||||
args['api_id'] = base64.b64decode(args['api_id']).decode('ascii')
|
||||
args['api_hash'] = base64.b64decode(args['api_hash']).decode('ascii')
|
||||
data['bot'] = args
|
||||
writeConf(data)
|
||||
|
||||
return mw.returnJson(True, '保存成功!', [])
|
||||
|
||||
|
||||
def installPreInspection():
|
||||
i = sys.version_info
|
||||
if i[0] < 3 or i[1] < 7:
|
||||
return "telebot在python小于3.7无法正常使用"
|
||||
return 'ok'
|
||||
|
||||
|
||||
def uninstallPreInspection():
|
||||
stop()
|
||||
return "请手动删除<br/> rm -rf {}".format(getServerDir())
|
||||
|
||||
|
||||
def getExtCfgByName(name):
|
||||
elist = getExtCfg()
|
||||
for x in elist:
|
||||
if x['name'] == name:
|
||||
return x
|
||||
return None
|
||||
|
||||
|
||||
def clientExtList():
|
||||
|
||||
args = getArgs()
|
||||
data_args = checkArgs(args, ['p'])
|
||||
if not data_args[0]:
|
||||
return data_args[1]
|
||||
|
||||
ext_path = getServerDir() + '/extend'
|
||||
if not os.path.exists(ext_path):
|
||||
return mw.returnJson(False, 'ok', [])
|
||||
elist_source = os.listdir(ext_path)
|
||||
|
||||
elist = []
|
||||
for e in elist_source:
|
||||
if e.endswith('py'):
|
||||
elist.append(e)
|
||||
|
||||
page = int(args['p'])
|
||||
page_size = 5
|
||||
|
||||
make_ext_list = []
|
||||
for ex in elist:
|
||||
tmp = {}
|
||||
tmp['name'] = ex
|
||||
edata = getExtCfgByName(ex)
|
||||
if edata:
|
||||
tmp['status'] = edata['status']
|
||||
else:
|
||||
tmp['status'] = 'stop'
|
||||
|
||||
tmp['tag'] = ex.split('_')[0]
|
||||
make_ext_list.append(tmp)
|
||||
|
||||
writeExtCfg(make_ext_list)
|
||||
dlist_sum = len(make_ext_list)
|
||||
|
||||
page_start = int((page - 1) * page_size)
|
||||
page_end = page_start + page_size
|
||||
|
||||
if page_end >= dlist_sum:
|
||||
ret_data = make_ext_list[page_start:]
|
||||
else:
|
||||
ret_data = make_ext_list[page_start:page_end]
|
||||
|
||||
data = {}
|
||||
data['data'] = ret_data
|
||||
data['args'] = args
|
||||
data['list'] = mw.getPage(
|
||||
{'count': dlist_sum, 'p': page, 'row': page_size, 'tojs': 'botExtListP'})
|
||||
|
||||
return mw.returnJson(True, 'ok', data)
|
||||
|
||||
|
||||
def setExtStatus():
|
||||
args = getArgs()
|
||||
data_args = checkArgs(args, ['name', 'status'])
|
||||
if not data_args[0]:
|
||||
return data_args[1]
|
||||
|
||||
elist = getExtCfg()
|
||||
name = args['name']
|
||||
status = args['status']
|
||||
for x in range(len(elist)):
|
||||
if elist[x]['name'] == name:
|
||||
elist[x]['status'] = status
|
||||
break
|
||||
|
||||
writeExtCfg(elist)
|
||||
|
||||
action = '开启'
|
||||
if status == 'stop':
|
||||
action = '关闭'
|
||||
|
||||
return mw.returnJson(True, action + '[' + name + ']扩展成功')
|
||||
|
||||
|
||||
def runLog():
|
||||
p = getServerDir() + '/task.log'
|
||||
return p
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
func = sys.argv[1]
|
||||
if func == 'status':
|
||||
print(status())
|
||||
elif func == 'start':
|
||||
print(start())
|
||||
elif func == 'stop':
|
||||
print(stop())
|
||||
elif func == 'restart':
|
||||
print(restart())
|
||||
elif func == 'reload':
|
||||
print(reload())
|
||||
elif func == 'initd_status':
|
||||
print(initdStatus())
|
||||
elif func == 'initd_install':
|
||||
print(initdInstall())
|
||||
elif func == 'initd_uninstall':
|
||||
print(initdUinstall())
|
||||
elif func == 'install_pre_inspection':
|
||||
print(installPreInspection())
|
||||
elif func == 'uninstall_pre_inspection':
|
||||
print(uninstallPreInspection())
|
||||
elif func == 'get_client_conf':
|
||||
print(getClientConf())
|
||||
elif func == 'set_client_conf':
|
||||
print(setClientConf())
|
||||
elif func == 'client_ext_list':
|
||||
print(clientExtList())
|
||||
elif func == 'set_ext_status':
|
||||
print(setExtStatus())
|
||||
elif func == 'run_log':
|
||||
print(runLog())
|
||||
|
||||
else:
|
||||
print('error')
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"sort": 7,
|
||||
"ps": "简单Telegram客服端管理",
|
||||
"name": "tgclient",
|
||||
"title": "tgclient",
|
||||
"shell": "install.sh",
|
||||
"versions":["1.1"],
|
||||
"tip": "soft",
|
||||
"checks": "server/tgclient",
|
||||
"path": "server/tgclient",
|
||||
"install_pre_inspection":true,
|
||||
"uninstall_pre_inspection":true,
|
||||
"display": 1,
|
||||
"author": "midoks",
|
||||
"date": "2023-03-06",
|
||||
"home": "https://my.telegram.org/apps",
|
||||
"depend_doc1":"https://docs.telethon.dev/en/stable/basic/installation.html",
|
||||
"type": 0,
|
||||
"pid": "5"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=Tgbot Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
ExecStart={$APP_PATH}/init.d/tgclient start
|
||||
ExecStop={$APP_PATH}/init.d/tgclient stop
|
||||
ExecReload={$APP_PATH}/init.d/tgclient reload
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,86 @@
|
||||
#!/bin/sh
|
||||
# chkconfig: 2345 55 25
|
||||
# description: Tgbot Service
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: Tgbot
|
||||
# Required-Start: $all
|
||||
# Required-Stop: $all
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: starts Tgbot
|
||||
# Description: starts the MDW-Web
|
||||
### END INIT INFO
|
||||
|
||||
# Simple Tgbot init.d script conceived to work on Linux systems
|
||||
# as it does use of the /proc filesystem.
|
||||
|
||||
PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
|
||||
mw_path={$SERVER_PATH}
|
||||
PATH=$PATH:$mw_path/bin
|
||||
|
||||
if [ -f $mw_path/bin/activate ];then
|
||||
source $mw_path/bin/activate
|
||||
fi
|
||||
|
||||
tg_start(){
|
||||
|
||||
isStart=`ps -ef|grep 'tgclient.py' |grep -v grep | awk '{print $2}'`
|
||||
if [ "$isStart" == '' ];then
|
||||
echo -e "starting tgclient... \c"
|
||||
cd $mw_path
|
||||
echo "python3 {$APP_PATH}/tgclient.py"
|
||||
python3 {$APP_PATH}/tgclient.py >> {$APP_PATH}/task.log &
|
||||
isStart=""
|
||||
while [[ "$isStart" == "" ]];
|
||||
do
|
||||
echo -e ".\c"
|
||||
sleep 0.5
|
||||
isStart=`ps -ef|grep 'tgclient.py' |grep -v grep | awk '{print $2}'`
|
||||
let n+=1
|
||||
if [ $n -gt 20 ];then
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if [ "$isStart" == '' ];then
|
||||
echo -e "\033[31mfailed\033[0m"
|
||||
echo -e "\033[31mError: tgclient service startup failed.\033[0m"
|
||||
return;
|
||||
fi
|
||||
echo -e "\033[32mdone\033[0m"
|
||||
else
|
||||
echo "starting tgclient...(pid $(echo $isStart)) already running"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
tg_stop(){
|
||||
echo -e "stopping tgclient ... \c";
|
||||
arr=`ps aux|grep 'tgclient.py'|grep -v grep|awk '{print $2}'`
|
||||
for p in ${arr[@]}
|
||||
do
|
||||
kill -9 $p > /dev/null 2>&1
|
||||
done
|
||||
echo -e "\033[32mdone\033[0m"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
tg_start
|
||||
;;
|
||||
stop)
|
||||
tg_stop
|
||||
;;
|
||||
restart|reload)
|
||||
tg_stop
|
||||
sleep 0.3
|
||||
tg_start
|
||||
;;
|
||||
*)
|
||||
echo "Please use start or stop as first argument"
|
||||
;;
|
||||
esac
|
||||
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
|
||||
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
VERSION=$2
|
||||
|
||||
# pip3 install ccxt
|
||||
if [ -f ${rootPath}/bin/activate ];then
|
||||
source ${rootPath}/bin/activate
|
||||
fi
|
||||
|
||||
pip3 install telethon
|
||||
|
||||
Install_App()
|
||||
{
|
||||
echo '正在安装脚本文件...' > $install_tmp
|
||||
mkdir -p $serverPath/source
|
||||
mkdir -p $serverPath/tgclient
|
||||
echo "${VERSION}" > $serverPath/tgclient/version.pl
|
||||
|
||||
cp -rf ${rootPath}/plugins/tgclient/startup/* $serverPath/tgclient
|
||||
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/tgclient/index.py start
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/tgclient/index.py initd_install
|
||||
echo '安装完成' > $install_tmp
|
||||
}
|
||||
|
||||
Uninstall_App()
|
||||
{
|
||||
if [ -f /usr/lib/systemd/system/tgclient.service ];then
|
||||
systemctl stop tgclient
|
||||
systemctl disable tgclient
|
||||
rm -rf /usr/lib/systemd/system/tgclient.service
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
|
||||
if [ -f $serverPath/tgclient/initd/tgclient ];then
|
||||
$serverPath/tgclient/initd/tgclient stop
|
||||
fi
|
||||
|
||||
rm -rf $serverPath/tgclient
|
||||
echo "Uninstall_redis" > $install_tmp
|
||||
}
|
||||
|
||||
action=$1
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_App
|
||||
else
|
||||
Uninstall_App
|
||||
fi
|
||||
Executable
+162
@@ -0,0 +1,162 @@
|
||||
function readme(){
|
||||
var readme = '<ul class="help-info-text c7">';
|
||||
readme += '<li>在填写好配置信息好后,还要执行下面命令。进行手机号和短信码验证。再重启,即可正常使用</li>';
|
||||
readme += '<li>cd /www/server/mdserver-web && source bin/activate && python3 /www/server/tgclient/tgclient.py</li>';
|
||||
readme += '</ul>';
|
||||
$('.soft-man-con').html(readme);
|
||||
}
|
||||
|
||||
function appPost(method, args,callback){
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'tgclient';
|
||||
req_data['func'] = method;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(toArrayObject(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/run', req_data, function(data) {
|
||||
layer.close(loadT);
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function appPostCallbak(method, args,callback){
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'tgclient';
|
||||
req_data['func'] = method;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(toArrayObject(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/callback', req_data, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function clientConf(){
|
||||
appPost('get_client_conf','',function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
var api_id = 'api_id';
|
||||
var api_hash = 'api_hash';
|
||||
if(rdata['status']){
|
||||
db_data = rdata['data'];
|
||||
|
||||
// api_id, api_hash
|
||||
api_id = db_data['api_id'];
|
||||
api_hash = db_data['api_hash'];
|
||||
|
||||
}
|
||||
|
||||
var mlist = '';
|
||||
mlist += '<p><span>api_id</span><input style="width: 250px;" class="bt-input-text mr5" name="api_id" value="'+api_id+'" type="text"><font>必填写</font></p>';
|
||||
mlist += '<p><span>api_hash</span><input style="width: 250px;" class="bt-input-text mr5" name="api_hash" value="'+api_hash+'" type="text"><font>必填写</font></p>';
|
||||
var option = '<style>.conf_p p{margin-bottom: 2px}</style>\
|
||||
<div class="conf_p" style="margin-bottom:0">\
|
||||
' + mlist + '\
|
||||
<div style="margin-top:10px; padding-right:15px" class="text-right">\
|
||||
<button class="btn btn-success btn-sm" onclick="submitBotConf()">保存</button>\
|
||||
</div>\
|
||||
</div>';
|
||||
$(".soft-man-con").html(option);
|
||||
});
|
||||
}
|
||||
|
||||
function submitBotConf(){
|
||||
var pull_data = {};
|
||||
pull_data['api_id'] = base64_encode($('input[name="api_id"]').val());
|
||||
pull_data['api_hash'] = base64_encode($('input[name="api_hash"]').val());
|
||||
appPost('set_client_conf',pull_data,function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.msg(rdata['msg'],{icon:rdata['status']?1:2,time:2000,shade: [0.3, '#000']});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function botExtList(){
|
||||
var body = '<div class="divtable mtb10">\
|
||||
<table class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0">\
|
||||
<thead>\
|
||||
<tr>\
|
||||
<th width="20">脚本</th>\
|
||||
<th width="120">类型</th>\
|
||||
<th width="10">状态</th>\
|
||||
</tr>\
|
||||
</thead>\
|
||||
<tbody id="ext_list"></tbody>\
|
||||
</table>\
|
||||
<div class="dataTables_paginate paging_bootstrap pagination">\
|
||||
<ul id="ext_list_page" class="page"></ul>\
|
||||
</div>\
|
||||
</div>';
|
||||
$('.soft-man-con').html(body);
|
||||
botExtListP(1);
|
||||
}
|
||||
|
||||
function setBotExtStatus(name,status){
|
||||
appPost('set_ext_status',{'name':name,'status':status}, function(rdata){
|
||||
var rdata = $.parseJSON(rdata.data);
|
||||
layer.msg(rdata['msg'],);
|
||||
showMsg(rdata['msg'], function(){
|
||||
botExtListP(1);
|
||||
},{icon:rdata['status']?1:2,shade: [0.3, '#000']},2000);
|
||||
});
|
||||
}
|
||||
|
||||
function botExtListP(p=1){
|
||||
appPost('client_ext_list',{'p':p}, function(rdata){
|
||||
// console.log(rdata);
|
||||
var rdata = $.parseJSON(rdata.data);
|
||||
// console.log(rdata);
|
||||
var tBody = '';
|
||||
|
||||
if (!rdata.status && rdata.data.length == 0 ){
|
||||
var tBody = '<tr><td colspan="4"><div style="text-align:center;">无数据</div></td></tr>';
|
||||
} else{
|
||||
var ldata = rdata.data.data;
|
||||
for (var i = 0; i < ldata.length; i++) {
|
||||
tBody += '<tr data-name="'+ldata[i]['name']+'">'
|
||||
tBody += '<td>'+ldata[i]['name']+'</td>';
|
||||
tBody += '<td>'+ldata[i]['tag']+'</td>';
|
||||
|
||||
if (ldata[i]['status'] == 'start'){
|
||||
tBody += '<td><span style="color:#20a53a;cursor: pointer;" class="ext_status glyphicon glyphicon-play"></span></td>';
|
||||
} else{
|
||||
tBody += '<td><span style="color:red;cursor: pointer;" class="ext_status glyphicon glyphicon-pause"></span></td>';
|
||||
}
|
||||
tBody +='<tr>';
|
||||
}
|
||||
}
|
||||
|
||||
$('#ext_list').html(tBody);
|
||||
$('#ext_list_page').html(rdata.data.list);
|
||||
|
||||
$('#ext_list .ext_status').click(function(){
|
||||
var name = $(this).parent().parent().data('name');
|
||||
var status = 'stop';
|
||||
if ($(this).hasClass('glyphicon-pause')){
|
||||
status = 'start';
|
||||
}
|
||||
setBotExtStatus(name,status);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
# coding:utf-8
|
||||
|
||||
# func: 自动检测已经注销群成员
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import json
|
||||
import base64
|
||||
import threading
|
||||
import asyncio
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
|
||||
import telebot
|
||||
from telebot import types
|
||||
from telebot.util import quick_markup
|
||||
|
||||
|
||||
# 指定群ID
|
||||
chat_id_list = [-1001578009023, -1001979545570]
|
||||
|
||||
async def run(client):
|
||||
while True:
|
||||
for chat_id in chat_id_list:
|
||||
s = await client.send_message(chat_id, '开始自动检测已经注销群成员...')
|
||||
count = 0
|
||||
async for user in client.iter_participants(chat_id):
|
||||
if user.deleted:
|
||||
count += 1
|
||||
msg = await client.kick_participant(chat_id, user)
|
||||
|
||||
await client.edit_message(chat_id, s.id, '已经检测到有(%d)个账户已失效' % (count))
|
||||
await asyncio.sleep(3)
|
||||
await client.edit_message(chat_id, s.id, '自动检测已经注销群成员完毕!!!')
|
||||
await asyncio.sleep(3)
|
||||
await client.delete_messages(chat_id, s)
|
||||
await asyncio.sleep(300)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pass
|
||||
@@ -0,0 +1,57 @@
|
||||
# coding:utf-8
|
||||
|
||||
# func: 自动邀请群成员
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import json
|
||||
import base64
|
||||
import threading
|
||||
import asyncio
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
|
||||
from telethon import utils
|
||||
from telethon import functions, types
|
||||
from telethon.tl.functions.messages import AddChatUserRequest
|
||||
from telethon.tl.functions.channels import InviteToChannelRequest
|
||||
# 指定群ID
|
||||
chat_id = -1001979545570
|
||||
filter_user_id = 5568699210
|
||||
|
||||
async def run(client):
|
||||
while True:
|
||||
info = await client.get_dialogs()
|
||||
for chat in info:
|
||||
print('name:{0} ids:{1} is_user:{2} is_channel:{3} is_group:{4}'.format(
|
||||
chat.name, chat.id, chat.is_user, chat.is_channel, chat.is_group))
|
||||
if chat.is_group and chat.id != chat_id:
|
||||
list_user = []
|
||||
async for user in client.iter_participants(chat.id):
|
||||
# print(chat.id, user.id, user.first_name)
|
||||
if filter_user_id != user.id and user.username != None and user.bot == False:
|
||||
# print(user.first_name)
|
||||
list_user.append(user.username)
|
||||
# await client(AddChatUserRequest(
|
||||
# chat_id=chat_id, # chat_id
|
||||
# user_id=user.username, # 被邀请人id
|
||||
# fwd_limit=1000 # Allow the user to see the 10 last messages
|
||||
# ))
|
||||
# print(list_user)
|
||||
try:
|
||||
await client(InviteToChannelRequest(
|
||||
channel=chat_id, # chat_id
|
||||
users=list_user, # 被邀请人id
|
||||
))
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
|
||||
await asyncio.sleep(80000)
|
||||
await asyncio.sleep(80000)
|
||||
|
||||
if __name__ == "__main__":
|
||||
pass
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
push_*.py 识别为推送插件
|
||||
@@ -0,0 +1,124 @@
|
||||
# coding:utf-8
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import json
|
||||
import base64
|
||||
import threading
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
# python /Users/midoks/Desktop/mwdev/server/tgclient/tgclient.py
|
||||
# cd /www/server/mdserver-web && python3 /www/server/tgclient/tgclient.py
|
||||
|
||||
from telethon import TelegramClient
|
||||
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
|
||||
logging.basicConfig(level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def getPluginName():
|
||||
return 'tgclient'
|
||||
|
||||
|
||||
def getPluginDir():
|
||||
return mw.getPluginDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getServerDir():
|
||||
return mw.getServerDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
sys.path.append(getServerDir() + "/extend")
|
||||
|
||||
|
||||
def getConfigData():
|
||||
cfg_path = getServerDir() + "/data.cfg"
|
||||
if not os.path.exists(cfg_path):
|
||||
mw.writeFile(cfg_path, '{}')
|
||||
t = mw.readFile(cfg_path)
|
||||
return json.loads(t)
|
||||
|
||||
|
||||
def writeConf(data):
|
||||
cfg_path = getServerDir() + "/data.cfg"
|
||||
mw.writeFile(cfg_path, json.dumps(data))
|
||||
return True
|
||||
|
||||
|
||||
def getExtCfg():
|
||||
cfg_path = getServerDir() + "/extend.cfg"
|
||||
if not os.path.exists(cfg_path):
|
||||
mw.writeFile(cfg_path, '{}')
|
||||
t = mw.readFile(cfg_path)
|
||||
return json.loads(t)
|
||||
|
||||
|
||||
def getStartExtCfgByTag(tag='push'):
|
||||
# 获取开启的扩展
|
||||
elist = getExtCfg()
|
||||
rlist = []
|
||||
for x in elist:
|
||||
if x['tag'] == tag and x['status'] == 'start':
|
||||
rlist.append(x)
|
||||
return rlist
|
||||
|
||||
|
||||
def writeLog(log_str):
|
||||
if __name__ == "__main__":
|
||||
print(log_str)
|
||||
|
||||
now = mw.getDateFromNow()
|
||||
log_file = getServerDir() + '/task.log'
|
||||
mw.writeFileLog(now + ':' + log_str, log_file, limit_size=5 * 1024)
|
||||
return True
|
||||
|
||||
|
||||
# start tgbot
|
||||
cfg = getConfigData()
|
||||
while True:
|
||||
cfg = getConfigData()
|
||||
if 'bot' in cfg and 'api_id' in cfg['bot']:
|
||||
if cfg['bot']['api_id'] != '' and cfg['bot']['api_id'] != 'api_id':
|
||||
break
|
||||
if cfg['bot']['api_hash'] != '' and cfg['bot']['api_hash'] != 'api_hash':
|
||||
break
|
||||
writeLog('等待输入配置,api_id')
|
||||
time.sleep(3)
|
||||
|
||||
client = TelegramClient('mdioks', cfg['bot']['api_id'], cfg['bot']['api_hash'])
|
||||
|
||||
async def plugins_run():
|
||||
plist = getStartExtCfgByTag('client')
|
||||
for p in plist:
|
||||
try:
|
||||
script = p['name'].split('.')[0]
|
||||
await __import__(script).run(client)
|
||||
except Exception as e:
|
||||
writeLog('----- client error start -------')
|
||||
writeLog(mw.getTracebackInfo())
|
||||
writeLog('----- client error end -------')
|
||||
|
||||
async def main(loop):
|
||||
await client.start()
|
||||
|
||||
# create new task
|
||||
writeLog('creating plugins_run task.')
|
||||
task = loop.create_task(plugins_run())
|
||||
await task
|
||||
|
||||
writeLog('It works.')
|
||||
await client.run_until_disconnected()
|
||||
task.cancel()
|
||||
|
||||
if __name__ == '__main__':
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(main(loop))
|
||||
Reference in New Issue
Block a user