Coder Social home page Coder Social logo

smartim's Introduction

SmartIM

一个使用微信PC版协议、QQ网页版协议实现的聊天工具,支持所有平台,无需安装

screenshot

实现的协议

工程简介

本项目为gradle工程,有以下4个模块

  • core: SmartIM中间层及相关IM接口。
  • smartqq:SmartQQ协议层,基于ScienJus/smartqq修改
  • wechat: 微信协议层,基于biezhi/wechat-bot-api修改
  • example: 示例应用模块,使用Swing界面技术

设计

  • 协议层: IM协议的API封装,网络框架使用okhttp,接口解析使用gson,原则上,一个API对应一个方法。
  • 中间层: 对协议层的封装,面向业务逻辑设计,负责向应用层提供数据,分发事件,比如消息接收事件,联系人变更事件。
  • 应用层: 基于协议层和中间层的应用,比如自动回复机器人,参考应用

基于本项目的应用

  • SmartIM example: SmartIM的Swing客户端,支持SmartQQ、微信聊天
  • SmartIM4Eclipse: SmartIM的eclipse插件,除了聊天,还能进行代码评审
  • SmartIM4IntelliJ: SmartIM的IDEA插件,除了聊天,还能进行代码评审

Example运行

三种运行方式,前提是都需要安装Java SDK或JRE。

  1. 下载SmartIM-App.jar (下载站点:国外,下载站点:国内)后,双击或通过java -jar SmartIM-App.jar来运行
  2. 使用Java Web Start运行,点击https://dl.ieclipse.cn/jws/SmartIM-App.jnlp或通过命令javaws https://dl.ieclipse.cn/jws/SmartIM-App.jnlp 运行
  3. 将项目导入Eclipse等IDE中,找到example下的Application.java类,在IDE中Run As Main

Windows

双击SmartIM-App.jar即可

Ubuntu (桌面版)

先安装jre(已有jre的跳过) 打开终端输入java -version,如果java未安装,则会提示找不到java指令,然后建议你安装列出的软件包,建议选择安装openjdk的jre。 安装完成后再输入java -version,测试一下jre是否安装成功

创建一个启动器,类型为应用程序,名称随便填,命令写java -jar /home/jamling/SmartIM-App.jar。注意jar的路径要是绝对路径哦。 然后就能像在windows下面一样双击运行了,是不是很方便?

如有更多问题,建议先参考常见问题

MacOS

Times字体不存在 点击https://www.freebestfonts.com/download?fn=1911下载字体后安装即可

即时讨论

请加入QQ群: 307490913

smartim's People

Contributors

dependabot[bot] avatar hellococooo avatar jamling 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smartim's Issues

请求失败,Api返回码[13]

登录成功!
{"retcode":13,"result":{"vfwebqq":"948022398d78b147d09675611a850c817146a94a8dd956dd531fe0dc7b9d92e7a716a7efc95cd5f9"}}
Exception in thread "main" cn.ieclipse.smartim.exception.LogicException: 请求失败,Api返回码[13]
at com.scienjus.smartqq.client.SmartQQApi.getResponseJson(SmartQQApi.java:595)
at com.scienjus.smartqq.client.SmartQQApi.getJsonObjectResult(SmartQQApi.java:538)
at com.scienjus.smartqq.client.SmartQQApi.getAccountInfo(SmartQQApi.java:403)
at com.scienjus.smartqq.client.SmartQQClient.init(SmartQQClient.java:214)
at com.scienjus.smartqq.Application.main(Application.java:82)

SmartQQ停止服务通知

由于业务调整,webQQ即将在2019年1月1日停止服务。请到im.qq.com下载QQ客户端使用,感谢你对QQ的支持。

Finally! 腾讯终于将在2019.01.01停止SmartQQ服务了。这其实也是意料之中的事,虽然惋惜,但还是感谢~

都是**人,我就用中文留言了

1、程序启动的时候根本不弹出登陆窗口
2、进入设置会有报错
2018-03-10 21:35:40.650 [AWT-EventQueue-0] WARN (FileUtils.java:163) -
an error occurred when read object from /Users/thttnt/Downloads/./config.cfg msg:java.io.FileNotFoundException: ./config.cfg (No such file or directory)
java.io.FileNotFoundException: ./config.cfg (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at cn.ieclipse.util.FileUtils.readObject(FileUtils.java:159)
at cn.ieclipse.smartim.settings.SmartIMSettings.loadProp(SmartIMSettings.java:43)
at cn.ieclipse.smartim.dialogs.SettingsDialog.(SettingsDialog.java:63)
at cn.ieclipse.smartim.dialogs.SettingsDialog.main(SettingsDialog.java:30)
at cn.ieclipse.smartim.actions.SettingsAction.actionPerformed(SettingsAction.java:21)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
目前就发现这两个错误

测试系统:MacOS
JRE版本: 1.8

Using the unexpected method, due to dependency conflicts on com.squareup.okhttp3:okhttp

Issue description

Hi, in SmartIM/smartqq, there are mulptiple versions of library com.squareup.okhttp3:okhttp. However, according to Maven's dependency management strategy: "first declaration wins", only com.squareup.okhttp3:okhttp:3.8.1 can be loaded, and com.squareup.okhttp3:okhttp:3.14.4 will be shadowed.

In total, there are 11 conflicting API pairs between these two library version.

Your project expects to reference the method <okhttp3.Handshake: toString()Ljava/lang/String;> via com.qiniu:qiniu-java-sdk7.2.29, which is included in the shaded version com.squareup.okhttp3:okhttp:3.14.4 (original dependency path). However, this method is missing in the actual loaded versioncom.squareup.okhttp3:okhttp:3.8.1. Surprisingly, it will not cause NoSuchMethodError at rumtime.
By further analyzing, I found that the caller(com.qiniu:qiniu-java-sdk) would invoke the method java.lang.Object.toString() defined in okhttp3.Handshake's superclass , due to dynamic binding mechanism (actual dependency path).

However, methods java.lang.Object.toString() and <okhttp3.Handshake: toString()Ljava/lang/String;> have different implementations, which will lead to buggy behaviors-----

Code snippet of <okhttp3.Handshake: toString()Ljava/lang/String;> in com.squareup.okhttp3:okhttp:3.14.4 (shadowed but expected to invoke):

@Override 
public String toString() {
    return "Handshake{"
        + "tlsVersion="
        + tlsVersion
        + " cipherSuite="
        + cipherSuite
        + " peerCertificates="
        + names(peerCertificates)
        + " localCertificates="
        + names(localCertificates)
        + '}';
  }

Code snippet of <toString()Ljava/lang/String;> in com.squareup.okhttp3:okhttp:3.8.1 (loaded version):

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

4D8897DF-4AE0-48BD-B718-DD740947E5A4

Actual dependency path:

<com.scienjus.smartqq.QNUploader: upload(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/qiniu/common/Zone;)Lcom/scienjus/smartqq/QNUploader$UploadInfo;> /home/wwww/wangSensor/unzip/SmartIM-master/smartqq/target/classes
<com.qiniu.storage.UploadManager: put(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/qiniu/http/Response;> /home/wwww/.m2/repository/com/qiniu/qiniu-java-sdk/7.2.29/qiniu-java-sdk-7.2.29.jar
<com.qiniu.storage.UploadManager: put(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/qiniu/util/StringMap;Ljava/lang/String;Z)Lcom/qiniu/http/Response;> /home/wwww/.m2/repository/com/qiniu/qiniu-java-sdk/7.2.29/qiniu-java-sdk-7.2.29.jar
<com.qiniu.storage.UploadManager: put(Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lcom/qiniu/util/StringMap;Ljava/lang/String;Z)Lcom/qiniu/http/Response;> /home/wwww/.m2/repository/com/qiniu/qiniu-java-sdk/7.2.29/qiniu-java-sdk-7.2.29.jar
<com.qiniu.storage.UploadManager: filterParam(Lcom/qiniu/util/StringMap;)Lcom/qiniu/util/StringMap;> /home/wwww/.m2/repository/com/qiniu/qiniu-java-sdk/7.2.29/qiniu-java-sdk-7.2.29.jar
<com.qiniu.util.StringMap: forEach(Lcom/qiniu/util/StringMap$Consumer;)V> /home/wwww/.m2/repository/com/qiniu/qiniu-java-sdk/7.2.29/qiniu-java-sdk-7.2.29.jar
<com.qiniu.util.StringMap$1: accept(Ljava/lang/String;Ljava/lang/Object;)V> /home/wwww/.m2/repository/com/qiniu/qiniu-java-sdk/7.2.29/qiniu-java-sdk-7.2.29.jar
<Java.lang.Object: toString()Ljava/lang/String;>

The detailed informantion of the remaining 10 conflicting API pairs can be found in the following attachment.
11 conflicting API pairs in project smartqq.txt

Dependency tree--

[INFO] cn.ieclipse.smartim:smartqq:jar:0.0.1
[INFO] +- cn.ieclipse.smartim:core:jar:0.0.1:compile
[INFO] | +- (org.slf4j:slf4j-api:jar:1.7.25:compile - omitted for duplicate)
[INFO] | +- (ch.qos.logback:logback-classic:jar:1.2.3:compile - omitted for duplicate)
[INFO] | +- (com.squareup.okhttp3:okhttp:jar:3.8.1:compile - omitted for duplicate)
[INFO] | +- (com.google.code.gson:gson:jar:2.8.0:compile - omitted for duplicate)
[INFO] | - (com.github.jamling:JavaUtils:jar:933b1c6551:compile - omitted for duplicate)
[INFO] +- com.qiniu:qiniu-java-sdk:jar:7.2.29:compile
[INFO] | +- (com.squareup.okhttp3:okhttp:jar:3.14.4:runtime - omitted for conflict with 3.8.1)
[INFO] | - (com.google.code.gson:gson:jar:2.8.5:runtime - omitted for conflict with 2.8.0)
[INFO] +- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] | +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] | - (org.slf4j:slf4j-api:jar:1.7.25:compile - omitted for duplicate)
[INFO] +- com.squareup.okhttp3:okhttp:jar:3.8.1:compile
[INFO] | - com.squareup.okio:okio:jar:1.13.0:compile
[INFO] +- junit:junit:jar:4.12:test
[INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- com.google.code.gson:gson:jar:2.8.0:compile
[INFO] - com.github.jamling:JavaUtils:jar:933b1c6551:compile
[INFO] +- com.github.jamling.JavaUtils:core:jar:933b1c6551:compile
[INFO] | - (org.slf4j:slf4j-api:jar:1.7.21:runtime - omitted for conflict with 1.7.25)
[INFO] +- com.github.jamling.JavaUtils:jee:jar:933b1c6551:compile
[INFO] | +- (org.slf4j:slf4j-api:jar:1.7.21:runtime - omitted for conflict with 1.7.25)
[INFO] | +- javax.servlet:javax.servlet-api:jar:3.1.0:runtime
[INFO] | - (com.github.jamling.JavaUtils:core:jar:933b1c6551:runtime - omitted for duplicate)
[INFO] +- com.github.jamling.JavaUtils:playground:jar:933b1c6551:compile
[INFO] | - (org.slf4j:slf4j-api:jar:1.7.21:runtime - omitted for conflict with 1.7.25)
[INFO] - com.github.jamling.JavaUtils:swing:jar:933b1c6551:compile
[INFO] - (org.slf4j:slf4j-api:jar:1.7.21:runtime - omitted for conflict with 1.7.25)

Suggested solutions:

Solution1: Remove the dependency com.squareup.okhttp3:okhttp:3.8.1.

Solution2: Declare version com.squareup.okhttp3:okhttp:3.14.4 as a direct dependency.

Thanks.
Best regards,
Coco

中文乱码问题

OS: Deepin 15.7

java -version
Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-2-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

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.