Giter Club home page Giter Club logo

cx-auto-sign's Introduction

cx-auto-sign

⚠注意

  • 由于超星学习通更新,目前无法签到二维码签到 #23 。其他类型的签到正常。
  • 自动签到 功能默认是 关闭 的,详见「配置说明

项目简介

cx-auto-sign 是基于 .NET5 的超星学习通自动签到工具。

本项目最低程度实现超星学习通的即时通讯协议。通过超星学习通的即时通讯协议监测最新的课程活动。当指定的课程有新的消息,就检查该课程是否有新的签到任务,如果有则进行签到。该方法与轮询相比,灵敏度更高,占用资源更低。

项目特性

  • 支持 手机号登录学号登录 两种登录方式
  • 支持 init 指令,用以生成配置文件
  • 支持 update 指令,更新课程信息
  • 实现自动签到工作流程
  • 支持 WebApi 控制自动签到启停
  • 支持通过 Server 酱 发送通知
  • 支持通过 PushPlus 推送加 发送通知
  • 支持签到成功后发送 邮件通知
  • 支持多账号配置

使用方法

0x00 运行环境

首先需要在 .Net Runtime 下载页 下载并安装 .NET5 Runtime(提示:Run server apps下边的下载)。

然后在 Release页面 下载 cx-auto-sign.zip,并解压到某个目录。

(你也可以在 Actions 中找到自动编译的测试版)

0x01 登录并初始化配置文件

在 cx-auto-sign.dll 所在的目录执行以下命令行(Windows 和 Linux都适用):

# 通过手机号码登录,不需要学校编码
dotnet ./cx-auto-sign.dll init -u "双引号里面填手机号" -p "双引号里面填密码" 

或:

# 通过学号登录,需要学校编码
dotnet ./cx-auto-sign.dll init -u "双引号里面填学号" -p "双引号里面填密码" -f "学校编码"

0x02 开始自动签到

cx-auto-sign.dll 所在的目录执行以下命令行:

dotnet ./cx-auto-sign.dll work

即可开始自动签到。

配置说明

配置文件均采用 json5 格式,方便编辑、打注释。

目录结构

cx-auto-sign
├── Configs
│   └── Username.json5
├── Images
│   └── ...
├── AppConfig.json5
├── ...
  • AppConfig.json5 文件为 应用配置文件
  • Configs 文件夹存放 用户配置文件
  • Username.json5 文件为 用户配置文件,其中 Username 指用户名。
  • Images 文件夹存放「图片签到」要提交的图片。

执行 init 指令时会创建以上文件

优先级

课程配置 > 用户配置 > 应用配置

当配置中没有该属性,或值为 null 时会向下一级取值。

  • 应用配置:为 AppConfig.json5 文件
  • 用户配置:为 Configs 文件夹下的文件
  • 课程配置:为 用户配置Couses 属性

应用配置

{
  // 通知,可以在 应用配置 和 用户配置 中配置
  "ServerChanKey": "", // Server 酱的 SendKey https://sct.ftqq.com/sendkey
  "PushPlusToken": "", // PushPlus 的 Token https://www.pushplus.plus/
  "BarkUrl": "", // Bark,例如:https://api.day.app/yourkey

  // 电报 Telegram Bot 通知,可以在 应用配置 和 用户配置 中配置
  // 详见:https://gist.github.com/dideler/85de4d64f66c1966788c1b2304b9caf1
  "TelegramBotToken": "",
  "TelegramBotChatId": "",

  // 企业微信通知
  // https://developer.work.weixin.qq.com/document/path/91039
  "WechatWorkAppComId": "",     // corpid
  "WechatWorkAppComSecret": "", // corpsecret
  // https://developer.work.weixin.qq.com/document/path/90236
  "WechatWorkAppAgentId": -1,
  "WechatWorkAppToUser": "@all",

  // 邮箱通知,可以在 应用配置 和 用户配置 中配置
  "Email": "",        // 接收通知的邮箱
  "SmtpHost": "",     // Smtp 发件主机
  "SmtpPort": 0,      // Smtp 发件端口
  "SmtpUsername": "", // Smtp 发件邮箱
  "SmtpPassword": "", // Smtp 发件密码
  "SmtpSecure": true, // Smtp 是否使用 SSL

  // 签到配置,可以在 应用配置、用户配置 和 课程配置 中配置
  "SignEnable": false,  // 允许自动,注意:默认是不会自动签到的!!!
  "SignNormal": true,   // 允许普通签到
  "SignGesture": true,  // 允许手势签到
  "SignPhoto": true,    // 允许图片签到,默认一张黑图,可在这里设置值,详见「拍照签到参数说明」
  "SignLocation": true, // 允许位置签到
  "SignDelay": 0,       // 检测到新签到活动后延迟签到的秒数(过小容易出现秒签到现象)
  "SignClientIp": "1.1.1.1", // 签到时提交的客户端 ip 地址
  "SignAddress": "**", // 位置签到的中文名地址
  // 经纬度坐标使用的是百度坐标系,可通过此工具来确定 https://tool.lu/coordinate/
  // 注意不要弄反了,不然你就在地球的另一头上课了
  "SignLongitude": "-1",// 位置签到的经度
  "SignLatitude": "-1", // 位置签到的纬度

  // 以下为特有属性,不会被优先级覆盖
  "DefaultUsername": "", // 默认用户
}

用户配置

{
  // 以下为特有属性,不会被优先级覆盖
  "Username": "",  // 学号或手机号
  "Password": "",  // 密码
  "Fid": "",       // 学校代号,fid 为 null 时使用手机号登录
  "WebApi": false, // 是否启动 Web Api,可以指定监听规则,详见「WebApi 说明」
  "Courses": {},   // 课程配置
}

课程配置

课程信息由程序获取的,不建议修改,但可以为课程配置不一样的签到设置。

可用 init 初始化或 update 更新课程信息

{
  "CourseId-ClassId": { // 键名格式为 CourseId-ClassId,不建议修改
    "ChatId": "",       // 会话 Id,不建议修改
    "CourseId": "",     // 课程 Id,不建议修改
    "ClassId": "",      // 班级 Id,不建议修改
    "CourseName": "",   // 课程名,不建议修改
    "ClassName": "",    // 班级名,不建议修改

    // 可在此配置签到设置
    // 例如:
    "SignEnable": true, // 默认是不会自动签到的!!!
  }
}

拍照签到参数说明

  • true"" 等无效路径:一张黑图
  • ".":随机使用 Images 文件夹下的一张图片
  • ["1.png", "2.jpg"] 数组:随机使用数组中的一张图片
  • 可使用绝对路径和相对路径,相对路径是相对于 Images 文件夹
  • 可指定文件夹,将随机使用文件夹下的一张图片,会 遍历 子文件夹

例如:

  • "机房/":随机使用 Images/机房 文件夹下的一张图片
  • ["", "机房/", "电脑/", "老师.jpg"]:将从黑图片、Images/机房 文件夹、Images/电脑 文件夹和 Images/老师.jpg 图片中随机使用一张图片

高级

将值改为对象,可以指定星期和时间

键名以 | 为分界线,左为星期(1 - 7),右为时间。值仍然按照上面规则。

特殊时间:m 早上,a 下午,e 晚上。

优先级,从上到下,例如:

{
  // 周一或周二,08:00-11:40
  "1,2|08:00-11:40": "机房1.jpg",
  // 周一或,14:30-18:00或19:00-21:35
  "1,5-7|14:30-18:00,19:00-21:35": "机房2.jpg",
  // 周三,上午或下午,即全天
  "3|am,pm": "机房3.jpg",
  // 忽略时间,即周四,全天
  "4|": "机房4.jpg",
  // 忽略星期,即每天下午
  "|pm": "机房5.jpg",
  // 其他时间段
  "": ["自习室1.jpg", "自习室2.jpg"],
}

测试配置

该功能是用来测试的,并不会真的签到,但会推送消息。

Usage: dotnet ./cx-auto-sign.dll test

Options:
  -h|--help  Show help information
  -u         指定用户名(学号)
  -i         配置中的 ChatId
  -k         配置中的课程的键名,格式为:CourseId-ClassId
  -t         签到类型,0 普通签到,1 拍照签到,2 二维码签到,3 手势签到,4 位置签到
  -d         日期时间,默认当前时间,用于拍照签到
例如
> dotnet ./cx-auto-sign.dll test -u xxx

[09:28:36 INF] [1649467716652.582] 这是一个测试
[09:28:36 INF] [1649467716652.582] 消息时间:1649467716.6727889
[09:28:36 INF] [1649467716652.582] 用户:xxx
[09:28:36 INF] [1649467716652.582] ChatId:null
[09:28:36 WRN] [1649467716652.582] 该课程不在课程列表
[09:28:36 INF] [1649467716652.582] 签到类型:普通签到
[09:28:36 WRN] [1649467716652.582] 由于 Email 为空,没有发送邮件通知
[09:28:36 WRN] [1649467716652.582] 由于 ServerChanKey 为空,没有发送 ServerChan 通知
[09:28:36 WRN] [1649467716652.582] 由于 PushPlusToken 为空,没有发送 PushPlus 通知
[09:28:36 INF] 签到信息
地址:**
经纬度:-1, -1
IP:1.1.1.1

WebApi 说明

详细

WebApi 默认监听规则是 http://localhost:5743,可在配置文件中修改。

若要监听全部网卡的 5743 端口,可写为:http://*:5743

查看状态

请求:GET /status

响应:

{
    "username":"0000000000",    // 学号或手机号
    "cxAutoSignEnabled":true    // 是否启动自动签到,默认为 true
}

启动自动签到

请求:GET /status/enable

响应:

{
    "code": 0,
    "msg":"success"
}

停止自动签到

请求:GET /status/disable

响应:

{
    "code": 0,
    "msg":"success"
}

FQA

1. 如何关闭自动更新检测?

cx-auto-sign.dll 所在目录下创建一个名为 .noupdate 的文件。

相关项目

声明

一切开发旨在学习,请勿用于非法用途。

cx-auto-sign's People

Contributors

bingzi-233 avatar cyanray avatar dependabot[bot] avatar h13-0 avatar moeshin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

yst1a h13-0 hankmo

cx-auto-sign's Issues

如果该项目失效

该项目是用于研究学习通签到、环信 IM WebSocket 协议。
由于不是直接调用 SDK,可能缺乏稳定性。
如果该项目失效或为了追求稳定实用性,可以看看一下两个项目,均直接调用环信 IM SDK:

多个课程中,部分课程签到失败

在自动签到的时候,出现了部分课程签到失败。但是测试的课程通过。

[10:15:22 INF] CXIM: Message received: 1 h
[10:15:47 INF] CXIM: Message received: 1 h
[10:16:04 INF] CXIM: Message received: 73 a["CABAAkorCikSDzE3ODU0NDQ5Mzc4OTE4NhoWY29uZmVyZW5jZS5lYXNlbW9iLmNvbQ=="]
[10:16:04 INF] 接收到课程消息并请求获取活动信息
[10:16:04 INF] CXIM: Message send: ["CABAAEorGikSDzE3ODU0NDQ5Mzc4OTE4NhoWY29uZmVyZW5jZS5lYXNlbW9iLmNvbVgA"]
[10:16:05 INF] CXIM: Message received: 349 a["CABAAEr7AQoCCAAiuAEI7JWA9Lm8ye4NEjkKDmN4LWRldiNjeHN0dWR5Eg8xNzg1NDQ0OTM3ODkxODYaFmNvbmZlcmVuY2UuZWFzZW1vYi5jb20gsoq5qoMwKAIyaAo5Cg5jeC1kZXYjY3hzdHVkeRIPMTc4NTQ0NDkzNzg5MTg2GhZjb25mZXJlbmNlLmVhc2Vtb2IuY29tEBEaJwoOY3gtZGV2I2N4c3R1ZHkSCDczMDQzMzg4GgtlYXNlbW9iLmNvbTgAKOyVgPS5vMnuDTIpEg8xNzg1NDQ0OTM3ODkxODYaFmNvbmZlcmVuY2UuZWFzZW1vYi5jb21A9JC5qoMw"]
[10:16:05 INF] 接收到课程消息
[10:16:05 INF] 释放 Session
[10:16:05 INF] CXIM: Message send: ["CABAAEo1EOyVgPS5vMnuDRopEg8xNzg1NDQ0OTM3ODkxODYaFmNvbmZlcmVuY2UuZWFzZW1vYi5jb21YAA=="]
[10:16:05 ERR] 解析失败,无法获取 Attachment
[10:16:05 INF] CXIM: Message received: 89 a["CABAAEo4CgIIADIpEg8xNzg1NDQ0OTM3ODkxODYaFmNvbmZlcmVuY2UuZWFzZW1vYi5jb204AUC2l7mqgzA="]

WebSocket 超时时间过长

帐号1输出:

[14:43:58 INF] CXIM: Message received: h
[14:44:23 INF] CXIM: Message received: h
[14:44:48 INF] CXIM: Message received: h
[14:45:13 INF] CXIM: Message received: h
[14:45:38 INF] CXIM: Message received: h
[14:46:03 INF] CXIM: Message received: h
[14:46:28 INF] CXIM: Message received: h
[14:46:53 INF] CXIM: Message received: h
[14:47:18 INF] CXIM: Message received: h
[14:47:43 INF] CXIM: Message received: h
[15:04:02 ERR] [WEBSOCKET CLIENT] Exception while connecting. Waiting 60 sec before next reconnection try. Error: 'Unable to conne
ct to the remote server'
System.Net.WebSockets.WebSocketException (0x80004005): Unable to connect to the remote server
---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.IO.IOException: Unable to read data from the transport connection: Connection reset by peer.
---> System.Net.Sockets.SocketException (104): Connection reset by peer
--- End of inner exception stack trace ---
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToke
n)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
at System.Net.Security.SslStream.<FillHandshakeBufferAsync>g__InternalFillHandshakeBufferAsync|182_0[TIOAdapter](TIOAdapter ada
p, ValueTask`1 task, Int32 minSize)
at System.Net.Security.SslStream.ReceiveBlobAsync[TIOAdapter](TIOAdapter adapter)
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthen
ticationData, Boolean isApm)
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions s
slOptions, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.WebSockets.WebSocketHandle.ConnectAsync(Uri uri, CancellationToken cancellationToken, ClientWebSocketOptions options)
at System.Net.WebSockets.WebSocketHandle.ConnectAsync(Uri uri, CancellationToken cancellationToken, ClientWebSocketOptions options)
at Websocket.Client.WebsocketClient.<>c__DisplayClass65_0.<<GetClientFactory>b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Websocket.Client.WebsocketClient.StartClient(Uri uri, CancellationToken token, ReconnectionType type, Boolean failFast)
[15:05:03 INF] CXIM: Message received: o
[15:05:03 INF] CXIM 登录

14:53:40,同班帐号2、3、4收到消息,但帐号1无提示,且未签到。帐号2输出:

[14:53:40 INF] 接收到课程消息
[14:53:40 INF] [1637650420328.1968] 消息时间:1637650420327.6873

这些帐号均在同一台机器上运行

运行的脚本版本为 8fbf8e1433eac8fb2e24d6e80254433fef49f03d

ERR

image

#90 它取消了心跳显示,它这之后还在运行吗?

powershell运行时报错

dotnet ./cx-auto-sign.dll init -u "user" -p "pwd"
无法执行,因为找不到指定的命令或文件。
可能的原因包括:
*内置的 dotnet 命令拼写错误。
*你打算执行 .NET 程序,但 dotnet-./cx-auto-sign.dll 不存在。
*你打算运行全局工具,但在路径上找不到具有此名称且前缀为 dotnet 的可执行文件。
执行的时候会出现这样的问题,文件夹中是cx-auto-sign.sln,可是尝试更改后缀执行也是报错,不太明白,请求指点一下

v2.1.2无法添加账户

image
在rm -rf上一个版本之后 解压新版本使用init指令初始化,然后报错 The -u field is required.

当自己教的课有签到任务时,提示“非 200 状态响应”

教师帐号输出:

[15:21:15 INF] CXIM: Message received: h
[15:21:25 INF] CXIM: Message received: a["CABAAkorCikSDzExODM3OTE1MTE2MzM5NhoWY29uZmVyZW5jZS5lYXNlbW9iLmNvbQ=="]
[15:21:25 INF] 接收到课程消息
[15:21:25 INF] [1637652085643.01] 消息时间:1637652085642.152
[15:21:25 INF] [1637652085643.01] ChatId: 118379151163396
[15:21:25 INF] [1637652085643.01] 获取 null 签到任务中
[15:21:26 ERR] [1637652085643.01] CXIM 接收到课程消息时出错
System.Exception: 非 200 状态响应:500 InternalServerError
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>500 Internal Server Error</title></head>
<body>
<center><h1>500 Internal Server Error</h1></center>
<hr><center>tengine</center>
</body>
</html>

at CxSignHelper.CxSignClient.TestResponseCode(IRestResponse response) in C:\Users\uint128\Documents\projects\cx-auto-sign\CxSignHelper\CxSignClient.cs:line 244
at CxSignHelper.CxSignClient.GetSignTasksAsync(String courseId, String classId) in C:\Users\uint128\Documents\projects\cx-auto-sign\CxSignHelper\CxSignClient.cs:line 89
at cx_auto_sign.WorkCommand.<>c__DisplayClass5_0.<<OnExecuteAsync>g__OnMessageReceived|3>d.MoveNext() in C:\Users\uint128\Documents\projects\cx-auto-sign\cx-auto-sign\WorkCommand.cs:line 159
[15:21:26 WRN] [1637652085643.01] 由于 Email 为空,没有发送邮件通知
[15:21:26 WRN] [1637652085643.01] 由于 ServerChanKey 为空,没有发送 ServerChan 通知
[15:21:26 INF] [1637652085643.01] 正在发送 PushPlus 通知
[15:21:26 INF] [1637652085643.01] 已发送 PushPlus 通知
[15:21:50 INF] CXIM: Message received: h

运行的脚本版本为 8fbf8e1

不会影响正常签到,但会发送不必要的错误通知

疑似升级,手势签到失败

近期挂的账户,出现了手势签到失败的情况。
获取手势正常
开始签到后签到失败
提示“非法请求”
已对程序升级,之后进行观测。

上传图片失败

图片是前几次课其他人拍的照片,爬下来的 235kb
Images/机房.png
截屏2022-04-20 19 40 07

19:11:01 I attActiveType: 0
19:11:01 I aType: 0
19:11:01 I activeType: 2
19:11:01 I 签到类型:"图片签到"
19:11:01 E 上传图片失败
System.ArgumentNullException: Value cannot be null. (Parameter 'fileName')
at System.IO.FileInfo..ctor(String originalPath, String fullPath, String fileName, Boolean isNormalized) in //src/libraries/System.IO.FileSystem/src/System/IO/FileInfo.cs:line 30
at System.IO.FileInfo..ctor(String fileName) in /
/src/libraries/System.IO.FileSystem/src/System/IO/FileInfo.cs:line 23
at RestSharp.RestRequest.AddFile(String name, String path, String contentType)
at CxSignHelper.CxSignClient.UploadImageAsync(String path) in /home/runner/work/cx-auto-sign/cx-auto-sign/CxSignHelper/CxSignClient.cs:line 195
at cx_auto_sign.SignWork.GetImageIdAsync(CxSignClient client, DateTime now) in /home/runner/work/cx-auto-sign/cx-auto-sign/cx-auto-sign/SignWork.cs:line 105
19:11:01 I 将使用一张黑图进行图片签到

无法进行签到

image
rt,发布签到消息后已经看不到签到提示的信息了,但是使用test参数时可以正常进行推送设置。

我怀疑是chaoxing把腾讯、阿里的服务器给屏蔽掉了。

WebApi无法访问

相关配置如下:
appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "Kestrel": { "EndPoints": { "Http": { "Url": "http://*:5743" } } } }
用户配置文件:
{ "Username": "********", "Password": "********", "Fid": null, "WebApi": true, "ServerChanKey": "********", "Course": {******** } }
启动后控制台有相关启动日志:
image
浏览器无论是访问http://127.0.0.1:5743/status还是http://localhost:5743/status都无法访问:
image

获取课程数据失败

[00:28:26 INF] 成功登录账号
[00:28:26 INF] 获取课程数据中...
Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'value')
   at Newtonsoft.Json.Utilities.ValidationUtils.ArgumentNotNull(Object value, String parameterName)
   at Newtonsoft.Json.Linq.Extensions.Value[T,U](IEnumerable`1 value)
   at Newtonsoft.Json.Linq.Extensions.Value[U](IEnumerable`1 value)
   at CxSignHelper.CxSignClient.GetClassDetailAsync(String courseId, String classId) in /home/runner/work/cx-auto-sign/cx-auto-sign/CxSignHelper/CxSignClient.cs:line 176
   at CxSignHelper.CxSignClient.GetCoursesAsync(JToken course) in /home/runner/work/cx-auto-sign/cx-auto-sign/CxSignHelper/CxSignClient.cs:line 150
   at cx_auto_sign.UserDataConfig.UpdateAsync(CxSignClient client) in /home/runner/work/cx-auto-sign/cx-auto-sign/cx-auto-sign/UserDataConfig.cs:line 131
   at cx_auto_sign.InitCommand.OnExecuteAsync(CommandLineApplication app) in /home/runner/work/cx-auto-sign/cx-auto-sign/cx-auto-sign/InitCommand.cs:line 31
   at McMaster.Extensions.CommandLineUtils.Conventions.ExecuteMethodConvention.InvokeAsync(MethodInfo method, Object instance, Object[] arguments)
   at McMaster.Extensions.CommandLineUtils.Conventions.ExecuteMethodConvention.OnExecute(ConventionContext context, CancellationToken cancellationToken)
   at McMaster.Extensions.CommandLineUtils.Conventions.ExecuteMethodConvention.<>c__DisplayClass0_0.<<Apply>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at McMaster.Extensions.CommandLineUtils.CommandLineApplication.ExecuteAsync(String[] args, CancellationToken cancellationToken)
   at McMaster.Extensions.CommandLineUtils.CommandLineApplication.ExecuteAsync[TApp](CommandLineContext context, CancellationToken cancellationToken)
   at cx_auto_sign.Program.Main(String[] args) in /home/runner/work/cx-auto-sign/cx-auto-sign/cx-auto-sign/Program.cs:line 31
   at cx_auto_sign.Program.<Main>(String[] args)

关于多用户通知的适配

通知的配置仅受应用配置文件所控制。这导致在多人签到时,所有通知都发送到了这个所配置的地方。
为什么不吧通知配置放在用户配置内达到通知精确到用户呢?

请问多用户改怎么配置。

我登录多个用户 但是开始签到就是AppConfig.json5里面 "DefaultUsername": "", // 默认用户,这里登录的账号,比如Configs 里面有3个用户,他就会以默认用户签到三次。其他的不签到

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.