Make Slack and Facebook Bots in Java.

Overview

JBot Build Status Codacy Javadocs Facebook Backers on Open Collective Sponsors on Open Collective MIT license

Make bots in Java.

JBot is a java framework (inspired by Howdyai's Botkit) to make Slack and Facebook bots in minutes. It provides all the boilerplate code needed so that you can make your bot live right away.

Why use JBot?

  • Provides you with all the boilerplate code which handles underlying websocket connections and other complexities.
  • Supports extra events in addition to all the events supported by Slack/Facebook which makes your work a lot more easier.
  • Receiving & sending messages is as easy as defining a @Controller and calling reply().
  • Conversation feature of JBot makes talking to your bot a breeze. This feature makes JBot different than rest of the Java frameworks out there.
  • Well tested with good coverage unit tests.
  • And many other features which can't just be mentioned here.

Not satisfied? Read on...

Still worried? Open an issue on Github and we can discuss.

JBot for Slack

Running your SlackBot is just 4 easy steps:

  1. Clone this project $ git clone https://github.com/rampatra/jbot.git.
  2. Create a slack bot and get your slack token.
  3. Paste the token in application.properties file.
  4. Run the example application by running JBotApplication in your IDE or via commandline:
    $ cd jbot
    $ mvn clean install
    $ cd jbot-example
    $ mvn spring-boot:run

You can now start talking with your bot ;)

Read the detailed Slack documentation to learn more.

JBot for Facebook

Similar to Slack, Facebook is simple too but has few extra steps:

  1. Clone this project $ git clone [email protected]:rampatra/jbot.git.
  2. Create a facebook app and a page.
  3. Generate a Page Access Token for the page (inside app's messenger settings).
  4. Paste the token created above in application.properties file.
  5. Run the example application by running JBotApplication in your IDE or via commandline:
    $ cd jbot
    $ mvn clean install
    $ cd jbot-example
    $ mvn spring-boot:run
  6. Setup webhook to receive messages and other events. You need to have a public address to setup webhook. You may use localtunnel.me to generate a public address if you're running locally on your machine.
  7. Specify the address created above in "Callback Url" field under "Webooks" setting and give the verify token as fb_token_for_jbot and click "Verify and Save".

You can now start messaging your bot by going to the facebook page and clicking on the "Send message" button.

If you're too lazy to start now and just want to play around, you can try jbot-example by visiting JBot facebook page and clicking on the "Send Message" button.

Read the detailed Facebook documentation to learn more.

Contributors

This project exists thanks to all the awesome people who contribute. If you want to flaunt your skills and make the project better, you can start contributing, and for any queries please just raise an issue and I would be more than happy to discuss :)

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

--
Happy Coding 🤖

Comments
  • Bot becomes dormant after amount of time even though still online on Bluemix

    Bot becomes dormant after amount of time even though still online on Bluemix

    Ive noticed that my bot keeps going offline on slack and so when a user tries to message it, it does not give any output back, when checking Bluemix, which is where I have deployed the bot, the app is still reported as online and there are no logs reporting any issues, the only way I have found to resolve this is to restart the bot on Bluemix, this then makes it active on Slack again and allows a user to message it, but then after a while the same thing will happen again.

    opened by Stuartkenworthy 24
  • Slack: Sending messages too quickly can result in TEXT_PARTIAL_WRITING error

    Slack: Sending messages too quickly can result in TEXT_PARTIAL_WRITING error

    It seems that the WebSocket connection does not like it when too many messages are sent at the same time and can result in the following error:

    java.lang.IllegalStateException: The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid state for called method

    This never resolves itself and requires a full reboot of the service to make it work again. This appears to be partially due to the fact that the ping service running in the background might occasionally conflict with the user called reply function and this concurrency causes an unresolvable exception within the websocket session.

    Most suggestions seem to suggest that wrapping the sendMessage within a synchronized block can fix this issue so the Bot class would need to be restructured slightly to support this.


    Has anyone else run into this issue or have any suggestions?

    opened by jbeemster 22
  • App not runnning once deployed to Heroku

    App not runnning once deployed to Heroku

    After deploying to Heroku and attempting to run the app I am seeing this error message in the logs: Error: Unable to access jarfile jbot-example/target/jbot-example-1.0.0-SNAPSHOT.jar

    I have checked this is the correct name for the jar file and this is the jar file that is auto-created when running mvn spring-boot:run.

    My procfile looks like this: web: java -Dserver.port=8080 -jar jbot-example/target/jbot-example-1.0.0-SNAPSHOT.jar

    And the path from the jbot directory to the jar file is jbot-example\target\jbot-example-1.0.0-SNAPSHOT.jar

    Any help with this would be greatly appreciated

    This is the first time I've used Heroku so not sure if I am missing anything.

    opened by Stuartkenworthy 14
  • Synchronize sendMessage and make ping task reset possible

    Synchronize sendMessage and make ping task reset possible

    This PR attempts to solve multi-threaded access to the WebSocketSession causing TEXT_PARTIAL_WRITING errors as detailed in this ticket along with allowing the Ping task to be reset.

    The multi-thread lock to sendMessage should remove partial write errors but I am still a bit confused about how to actually reset the whole system in case the socket session becomes unrecoverable.

    Is it just about calling startRTMAndWebSocketConnection again if I can detect that the service is struggling? Does the "manager" then need to be stored so it can be stopped and started cleanly in this case?

    opened by jbeemster 13
  • Running jbot-example fails with a NoClassDefFoundError

    Running jbot-example fails with a NoClassDefFoundError

    I've been trying to run jbot-example–I cloned the repository, ran mvn install in the jbot folder, went into jbot-example and ran mvn spring-boot:run, but it throws this error:

    [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.0.RELEASE:run (default-cli) on project jbot-example: An exception occurred while running. 
    null: InvocationTargetException: Error creating bean with name 'slackBot': Invocation of init method failed; 
    nested exception is java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager: org.apache.tomcat.util.res.StringManager -> [Help 1]
    
    opened by RobinsonZ 13
  • SlackBot : websocket connection closes with SSLException

    SlackBot : websocket connection closes with SSLException

    It seems to be totally random - after a few hours or days the bot will just crash. I'm running a barely modified version of the example bot on a dedicated Ubuntu 16 server doing nothing else. There isn't much to go on in the logs. Is there a place to catch this exception and reestablish the connection?

    2018-06-07 18:36:57.761 DEBUG 1030 --- [ient-SecureIO-2] me.ramswaroop.jbot.core.slack.Bot : WebSocket closed: StandardWebSocketSession[id=0, uri=null], Close Status: CloseStatus[code=1006, reason=Unexpected Status of SSLEngineResult after an unwrap() operation]

    EDIT: Seems to be the same as #97

    bug 
    opened by ochompsky 12
  • Error handling response from Slack

    Error handling response from Slack

    Using 3.0.3-SNAPSHOT as I want the reply feature of messages, but get the following error when the bot responds:

    2017-02-06 14:43:56.192 ERROR 8104 --- [ient-SecureIO-1] me.ramswaroop.jbot.core.slack.Bot        : Error handling response from Slack: {"type":"message","message":{"type":"message","user":"U3QCGKKNU","text":"game Plague Inc","thread_ts":"1486392240.000396","reply_count":1,"replies":[{"user":"U41LKC0NA","ts":"1486392241.000397"}],"ts":"1486392240.000396"},"subtype":"message_replied","hidden":true,"channel":"G3RU2Q5MG","event_ts":"1486392241.263880","ts":"1486392241.000398"}. 
    Exception: 
    
    com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of me.ramswaroop.jbot.core.slack.models.Message: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
     at [Source: {"type":"message","message":{"type":"message","user":"U3QCGKKNU","text":"game Plague Inc","thread_ts":"1486392240.000396","reply_count":1,"replies":[{"user":"U41LKC0NA","ts":"1486392241.000397"}],"ts":"1486392240.000396"},"subtype":"message_replied","hidden":true,"channel":"G3RU2Q5MG","event_ts":"1486392241.263880","ts":"1486392241.000398"}; line: 1, column: 30] (through reference chain: me.ramswaroop.jbot.core.slack.models.Event["message"])
    	at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1205) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:499) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:101) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2842) ~[jackson-databind-2.8.5.jar:2.8.5]
    	at me.ramswaroop.jbot.core.slack.Bot.handleTextMessage(Bot.java:159) ~[jbot-3.0.3-SNAPSHOT.jar:3.0.3-SNAPSHOT]
    	at me.ramswaroop.jbot.core.slack.BotWebSocketHandler.handleTextMessage(BotWebSocketHandler.java:32) [jbot-3.0.3-SNAPSHOT.jar:3.0.3-SNAPSHOT]
    	at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:110) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$000(StandardWebSocketHandlerAdapter.java:42) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:78) [spring-websocket-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    	at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:399) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:500) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:295) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:131) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameClient.processSocketRead(WsFrameClient.java:73) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameClient.access$300(WsFrameClient.java:31) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:131) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:114) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.AsyncChannelWrapperSecure$WrapperFuture.complete(AsyncChannelWrapperSecure.java:463) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at org.apache.tomcat.websocket.AsyncChannelWrapperSecure$ReadTask.run(AsyncChannelWrapperSecure.java:332) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_121]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_121]
    	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]
    
    opened by Omertron 12
  • Slackbot is down with java.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed

    Slackbot is down with java.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed

    hi, Slack bot is continuously toggles (going on and off) with below error since yesterday. It tries to ping and comes up for some time and then after couple of times it goes down permanently ( never comes up until i deploy the app again) . Could you please look into this websocket issue

    2021-01-05 18:47:43.904 ERROR 1 --- [pool-2-thread-1] me.ramswaroop.jbot.core.slack.Bot        : Error pinging Slack. Slack bot may go offline when not active. Exception: 
    
    java.lang.IllegalStateException: Message will not be sent because the WebSocket session has been closed
    	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:425) ~[tomcat-embed-websocket-9.0.24.jar!/:9.0.24]
    	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309) ~[tomcat-embed-websocket-9.0.24.jar!/:9.0.24]
    	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250) ~[tomcat-embed-websocket-9.0.24.jar!/:9.0.24]
    	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:223) ~[tomcat-embed-websocket-9.0.24.jar!/:9.0.24]
    	at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49) ~[tomcat-embed-websocket-9.0.24.jar!/:9.0.24]
    	at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:213) ~[spring-websocket-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
    	at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:106) ~[spring-websocket-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
    	at me.ramswaroop.jbot.core.slack.Bot$PingTask.run(Bot.java:361) ~[jbot-4.1.2-rc.3-SNAPSHOT.jar!/:4.1.2-rc.3-SNAPSHOT]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_111-internal]
    	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_111-internal]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_111-internal]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_111-internal]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111-internal]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111-internal]
    	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111-internal]
    
    2021-01-05 18:47:43.906  INFO 1 --- [pool-2-thread-1] o.s.w.s.c.WebSocketConnectionManager     : Stopping WebSocketConnectionManager
    
    opened by lavanyachadga 11
  • Restart required when chatting to new users

    Restart required when chatting to new users

    Hi, I have encountered a big issue. Say you entered a slack domain and it has several users. When a new user that haven't yet talked to the JBot, the JBot fails to take inputs. But when a restart of the spring-boot service is done, those users who tried interacting with the bots and failed are now are able to interact. Can you please, tell me where can the problem be as soon as possible. :)

    opened by sunayansaikia 11
  • Unable to stop conversation

    Unable to stop conversation

    Hi,

    I think I spotted a bug. If we take you meeting scheduler example, even if you stop the conversation by answering "no" to the askWhetherToRepeat step, then, forever, all the steps are called. So the conversation is not really closed.

    I hope that's clear...

    question 
    opened by mboujonnier 11
  • Upload file to slack

    Upload file to slack

    Hii everyone, i'm trying to send file to slack using Jbot, i saw an issue that use the Meteoroid library to do it, but when i get the maven dependecy of the library it doesn't work for me, if there some suggestion please ?

    opened by Elfilali-Taoufiq 10
  • Any interest in a PR that will bump to SpringBoot v2.7.6?

    Any interest in a PR that will bump to SpringBoot v2.7.6?

    Internally we have been using this bot for some years successfully but given the number of CVE's present in the current version of springboot we have ended up forking the library and bumping dependencies there.

    We have successfully upgraded it to v2.7.6 with Java 11 and would be happy to contribute this back if that is of interest!

    opened by jbeemster 3
  • How to use jbot in a standalone application without spring boot

    How to use jbot in a standalone application without spring boot

    Hi, I wanted to create my custom slack bot by extending ur Bot class. But, how can I run my bot in a standalone application (the bot should run continuously in the background) without using spring boot? Any guidance on this pls?

    opened by Syed-SnapLogic 0
  • Schedule Meeting time accepts any string. Needs time validation

    Schedule Meeting time accepts any string. Needs time validation

    Currently the bot with either Facebook or Slack will accept any string for time and schedule it.

    User story: user: setup meeting bot: At what time (ex. 15:30) do you want me to set up the meeting? user: no bot: you meeting is set at no. Would you like to repeat it tomorrow?

    Some sort of time validation should be implemented to avoid this bug.

    opened by Mistermo716 0
  • Error while extracting response for type [class me.ramswaroop.jbot.core.slack.models.Event]

    Error while extracting response for type [class me.ramswaroop.jbot.core.slack.models.Event]

    I get this error [1] - I think it might be tied to using a deprecated method which is warned about in the response, but there is an error unmarshalling the unknown field?

    [1]

    web    | org.springframework.web.client.RestClientException: Error while extracting response for type [class me.ramswaroop.jbot.core.slack.models.Event] and content type [application/json;charset=utf-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `me.ramswaroop.jbot.core.slack.models.Error` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('method_deprecated'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `me.ramswaroop.jbot.core.slack.models.Error` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('method_deprecated')
    web    |  at [Source: (PushbackInputStream); line: 1, column: 21] (through reference chain: me.ramswaroop.jbot.core.slack.models.Event["error"])
    web    | 	at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:120) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:996) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:979) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:739) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:672) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:340) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at me.ramswaroop.jbot.core.slack.SlackService.getImChannels(SlackService.java:64) ~[jbot-4.1.2-rc.2.jar:4.1.2-rc.2]
    web    | 	at me.ramswaroop.jbot.core.slack.SlackService.connectRTM(SlackService.java:52) ~[jbot-4.1.2-rc.2.jar:4.1.2-rc.2]
    web    | 	at me.ramswaroop.jbot.core.slack.Bot.startRTMAndWebSocketConnection(Bot.java:313) ~[jbot-4.1.2-rc.2.jar:4.1.2-rc.2]
    web    | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    web    | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
    web    | 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    web    | 	at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    web    | 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:415) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:173) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:153) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:95) ~[spring-boot-2.3.5.RELEASE.jar:2.3.5.RELEASE]
    web    | 	at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.eclipse.jetty.plus.annotation.ContainerInitializer.callStartup(ContainerInitializer.java:142) ~[na:na]
    web    | 	at org.eclipse.jetty.annotations.ServletContainerInitializersStarter.doStart(ServletContainerInitializersStarter.java:64) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:356) ~[na:na]
    web    | 	at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1457) ~[na:na]
    web    | 	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1422) ~[na:na]
    web    | 	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:911) ~[na:na]
    web    | 	at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:288) ~[na:na]
    web    | 	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97) ~[na:na]
    web    | 	at org.eclipse.jetty.server.handler.StatisticsHandler.doStart(StatisticsHandler.java:253) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.server.Server.start(Server.java:423) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97) ~[na:na]
    web    | 	at org.eclipse.jetty.server.Server.doStart(Server.java:387) ~[na:na]
    web    | 	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at org.eclipse.jetty.xml.XmlConfiguration.lambda$main$2(XmlConfiguration.java:1908) ~[jetty-xml-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at java.base/java.security.AccessController.doPrivileged(AccessController.java:554) ~[na:na]
    web    | 	at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1857) ~[jetty-xml-9.4.33.v20201020.jar:9.4.33.v20201020]
    web    | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    web    | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
    web    | 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    web    | 	at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    web    | 	at org.eclipse.jetty.start.Main.invokeMain(Main.java:218) ~[na:na]
    web    | 	at org.eclipse.jetty.start.Main.start(Main.java:491) ~[na:na]
    web    | 	at org.eclipse.jetty.start.Main.main(Main.java:77) ~[na:na]
    web    | Caused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `me.ramswaroop.jbot.core.slack.models.Error` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('method_deprecated'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `me.ramswaroop.jbot.core.slack.models.Error` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('method_deprecated')
    web    |  at [Source: (PushbackInputStream); line: 1, column: 21] (through reference chain: me.ramswaroop.jbot.core.slack.models.Event["error"])
    web    | 	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:283) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:241) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:105) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	... 74 common frames omitted
    web    | Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `me.ramswaroop.jbot.core.slack.models.Error` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('method_deprecated')
    web    |  at [Source: (PushbackInputStream); line: 1, column: 21] (through reference chain: me.ramswaroop.jbot.core.slack.models.Event["error"])
    web    | 	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1455) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1081) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:323) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1408) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:176) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:166) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521) ~[jackson-databind-2.11.3.jar:2.11.3]
    web    | 	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:272) ~[spring-web-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    web    | 	... 76 common frames omitted
    web    | 
    web    | 2021-03-19 09:42:51.565:WARN:oejx.XmlConfiguration:main: Deprecated constructor public org.eclipse.jetty.util.ssl.SslContextFactory() in file:///app/resources/jetty-websocket-httpclient.xml
    web    | 2021-03-19 09:42:51.859  INFO 21 --- [           main] o.s.w.s.c.WebSocketConnectionManager     : Starting WebSocketConnectionManager
    web    | 2021-03-19 09:42:51.859  INFO 21 --- [           main] o.s.w.s.c.WebSocketConnectionManager     : Connecting to WebSocket at wss://cerberus-xxxx.lb.slack-msgs.com/websocket/aR3iCk2D6pPP8zPSgzOPpHKEwA3Shi3YAXwD8KCLPV0AOciTDYmCpUOurHi_CwHvbfFh_uJ6PT-BuPUi1Mn-OSb1K-HOHsiui3G74BJs0S0=
    web    | 2021-03-19 09:42:52.854  INFO 21 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
    web    | 2021-03-19 09:42:54.055  INFO 21 --- [cTaskExecutor-1] o.s.w.s.c.WebSocketConnectionManager     : Successfully connected
    web    | 2021-03-19 09:42:54.955  INFO 21 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
    web    | 2021-03-19 09:42:55.360  INFO 21 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 15 endpoint(s) beneath base path '/actuator'
    web    | 2021-03-19 09:42:55.762  INFO 21 --- [           main] c.evry.fs.arch.icpautomate.slackbot.App  : Started App in 30.309 seconds (JVM running for 50.885)
    
    opened by davidkarlsen 0
Releases(jbot-4.1.2-rc.1)
Owner
Ram
Love making teeny tiny apps solving tiny problems in life.
Ram
An android application to make students life easier by reducing their backpack weight.

Smart-Schooling An android application to make students life easier by reducing their backpack weight. Dont forget to ⭐ the repo Overview Almost every

Thamizh Kaniyan 3 Jan 31, 2022
Sauron, the all seeing eye! It is a service to generate automated reports and track migrations, changes and dependency versions for backend services also report on known CVE and security issues.

SAURON - VERSION AND DEPLOYMENT TRACKER DESCRIPTION Sauron, the all seeing eye! It is a service to generate automated reports and track migrations, ch

FREENOWTech 20 Oct 31, 2022
A Local implementation of a java library functions to create a serverside and clientside application which will communicate over TCP using given port and ip address.

A Local implementation of java library functions to create a serverside and clientside application which will communicate over TCP using given port and ip address.

Isaac Barry 1 Feb 12, 2022
Java Notes & Codes for better understanding and it contains all the funtions with examples and also added Cheat Sheet for Revision

Java Notes & Codes for better understanding and it contains all the funtions with examples and also added Cheat Sheet for Revision...

Ujjawal Singh 1 Nov 30, 2022
A calculator that performs various operations such as addition, subtraction, multiplication and division of positive and negative values

A calculator that performs various operations such as addition, subtraction, multiplication and division of positive and negative values The calculator also does percentages, square roots and squares

Andrey Fabricio 1 Jan 31, 2022
Tripoli imports raw mass spectrometer data files and supports interactive review and archiving of isotopic data.

Tripoli imports raw mass spectrometer data files and supports interactive review and archiving of isotopic data. Tripoli facilitates visualization of temporal trends and scatter during measurement, statistically rigorous filtering of data, and calculation of statistical parameters.

CIRDLES 7 Dec 15, 2022
Automatically discover and tag PII data across BigQuery tables and apply column-level access controls based on confidentiality level.

Automatically discover and tag PII data across BigQuery tables and apply column-level access controls based on confidentiality level.

Google Cloud Platform 18 Dec 29, 2022
A Java to iOS Objective-C translation tool and runtime.

J2ObjC: Java to Objective-C Translator and Runtime Project site: https://j2objc.org J2ObjC blog: https://j2objc.blogspot.com Questions and discussion:

Google 5.9k Dec 29, 2022
API gateway for REST and SOAP written in Java.

Membrane Service Proxy Reverse HTTP proxy (framework) written in Java, that can be used as an API gateway as a security proxy for HTTP based integrati

predic8 GmbH 389 Dec 31, 2022
An extensible Java framework for building XML and non-XML streaming applications

Smooks Framework This is the Git source code repository for the Smooks Project. Build Status Building Pre-requisites JDK 8 Apache Maven 3.2.x Maven gi

Smooks Framework 353 Dec 1, 2022
The open-source Java obfuscation tool working with Ant and Gradle by yWorks - the diagramming experts

yGuard yGuard is an open-source Java obfuscation tool. With yGuard it is easy as pie ( ?? ) to configure obfuscation through an extensive ant task. yG

yWorks GmbH 265 Jan 2, 2023
fastutil extends the Java Collections Framework by providing type-specific maps, sets, lists and queues.

fastutil is a collection of type-specific Java classes that extend the Java Collections Framework by providing several containers, such as maps, sets, lists and prority queues, implementing the interfaces of the java.util package; it also provides big (64-bit) arrays, sets, lists, and fast, practical I/O classes for binary and text files.

Sebastiano Vigna 1.5k Jan 7, 2023
An example mod that uses Vigilance and Essential with Java

Vigilance Example Mod (Java) I haven't really seen any mods that use Vigilance and Essential with Java, so here's a quick example mod I made. It's bas

null 6 Dec 25, 2022
A harness to build the source code from openjdk.java.net using Free Software tools and dependencies

A harness to build the source code from openjdk.java.net using Free Software tools and dependencies

IcedTea 2 Mar 5, 2022
Implementation of various design patterns in C++, Java and Python

DesignPatterns Implementation of various design patterns in C++, Java and Python. Strategy Pattern Description: Strategy Pattern in implemented in a p

Lakshmanan Meiyappan 12 Jul 20, 2022
Select USACO solutions in Java and C++

Select USACO solutions in Java and C++

Akshar Barot 2 Sep 14, 2022
Modern Java - A Guide to Java 8

Modern Java - A Guide to Java 8 This article was originally posted on my blog. You should also read my Java 11 Tutorial (including new language and AP

Benjamin Winterberg 16.1k Jan 5, 2023
icecream-java is a Java port of the icecream library for Python.

icecream-java is a Java port of the icecream library for Python.

Akshay Thakare 20 Apr 7, 2022
JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface t

null 28 Dec 30, 2022