Browse Source

1. Webhook sample

master
Rubenlagus 10 years ago
parent
commit
2d748832b0
  1. 8
      .idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_2.xml
  2. 13
      .idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_2_alpha_2.xml
  3. 2
      BotAPi.iml
  4. 80
      src/main/java/org/telegram/Main.java
  5. 22
      src/main/java/org/telegram/updateshandlers/webHookExampleHandlers.java

8
.idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_1.xml → .idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_2.xml

@ -1,13 +1,13 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.1"> <library name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.2">
<CLASSES> <CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.1/TelegramBots-v2.3.3.1.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.2/TelegramBots-v2.3.3.2.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC> <JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.1/TelegramBots-v2.3.3.1-javadoc.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.2/TelegramBots-v2.3.3.2-javadoc.jar!/" />
</JAVADOC> </JAVADOC>
<SOURCES> <SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.1/TelegramBots-v2.3.3.1-sources.jar!/" /> <root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.2/TelegramBots-v2.3.3.2-sources.jar!/" />
</SOURCES> </SOURCES>
</library> </library>
</component> </component>

13
.idea/libraries/Maven__com_github_rubenlagus_TelegramBots_v2_3_3_2_alpha_2.xml

@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.2-alpha-2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.2-alpha-2/TelegramBots-v2.3.3.2-alpha-2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.2-alpha-2/TelegramBots-v2.3.3.2-alpha-2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/rubenlagus/TelegramBots/v2.3.3.2-alpha-2/TelegramBots-v2.3.3.2-alpha-2-sources.jar!/" />
</SOURCES>
</library>
</component>

2
BotAPi.iml

@ -12,6 +12,8 @@
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.2" level="project" /> <orderEntry type="library" name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.rubenlagus:TelegramBots:v2.3.3.2" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.23" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.23" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b34" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.hk2.external:javax.inject:2.4.0-b34" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-http-server:2.3.23" level="project" /> <orderEntry type="library" name="Maven: org.glassfish.grizzly:grizzly-http-server:2.3.23" level="project" />

80
src/main/java/org/telegram/Main.java

@ -4,7 +4,13 @@ import org.telegram.telegrambots.TelegramApiException;
import org.telegram.telegrambots.TelegramBotsApi; import org.telegram.telegrambots.TelegramBotsApi;
import org.telegram.telegrambots.logging.BotLogger; import org.telegram.telegrambots.logging.BotLogger;
import org.telegram.telegrambots.logging.BotsFileHandler; import org.telegram.telegrambots.logging.BotsFileHandler;
import org.telegram.updateshandlers.*; import org.telegram.updateshandlers.ChannelHandlers;
import org.telegram.updateshandlers.DirectionsHandlers;
import org.telegram.updateshandlers.FilesHandlers;
import org.telegram.updateshandlers.RaeHandlers;
import org.telegram.updateshandlers.TransifexHandlers;
import org.telegram.updateshandlers.WeatherHandlers;
import org.telegram.updateshandlers.WebHookExampleHandlers;
import java.io.IOException; import java.io.IOException;
import java.util.logging.ConsoleHandler; import java.util.logging.ConsoleHandler;
@ -25,46 +31,76 @@ public class Main {
try { try {
BotLogger.registerLogger(new BotsFileHandler()); BotLogger.registerLogger(new BotsFileHandler());
} catch (IOException e) { } catch (IOException e) {
BotLogger.severe("MAIN", e); BotLogger.severe(LOGTAG, e);
} }
// default, start all sample bots in getUpdates mode
if (!BuildVars.useWebHook) {
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try { try {
TelegramBotsApi telegramBotsApi = createTelegramBotsApi();
try {
// Register long polling bots. They work regardless type of TelegramBotsApi we are creating
telegramBotsApi.registerBot(new ChannelHandlers()); telegramBotsApi.registerBot(new ChannelHandlers());
telegramBotsApi.registerBot(new DirectionsHandlers()); telegramBotsApi.registerBot(new DirectionsHandlers());
telegramBotsApi.registerBot(new RaeHandlers()); telegramBotsApi.registerBot(new RaeHandlers());
telegramBotsApi.registerBot(new WeatherHandlers()); telegramBotsApi.registerBot(new WeatherHandlers());
telegramBotsApi.registerBot(new TransifexHandlers()); telegramBotsApi.registerBot(new TransifexHandlers());
telegramBotsApi.registerBot(new FilesHandlers()); telegramBotsApi.registerBot(new FilesHandlers());
} catch (TelegramApiException e) { } catch (TelegramApiException e) {
BotLogger.error(LOGTAG, e); BotLogger.error(LOGTAG, e);
} }
// Filled a path to a pem file ? looks like you're going for the self signed option then, invoke with store and pem file to supply.
// check https://core.telegram.org/bots/self-signed#java-keystore for generating a keypair in store and exporting the pem.
// dont forget to split the pem bundle (begin/end), use only the public key as input!
} else if (!BuildVars.pathToCertificatePublicKey.isEmpty()) {
try {
TelegramBotsApi telegramBotsSelfWebhookApi = new TelegramBotsApi(BuildVars.pathToCertificateStore, BuildVars.certificateStorePassword, BuildVars.EXTERNALWEBHOOKURL, BuildVars.INTERNALWEBHOOKURL,BuildVars.pathToCertificatePublicKey);
telegramBotsSelfWebhookApi.registerBot(new webHookExampleHandlers());
} catch (Exception e) { } catch (Exception e) {
BotLogger.error(LOGTAG, e); BotLogger.error(LOGTAG, e);
} }
}
private static TelegramBotsApi createTelegramBotsApi() throws TelegramApiException {
TelegramBotsApi telegramBotsApi;
if (!BuildVars.useWebHook) {
// Default (long polling only)
telegramBotsApi = createLongPollingTelegramBotsApi();
} else if (!BuildVars.pathToCertificatePublicKey.isEmpty()) {
// Filled a path to a pem file ? looks like you're going for the self signed option then, invoke with store and pem file to supply.
telegramBotsApi = createSelfSignedTelegramBotsApi();
telegramBotsApi.registerBot(new WebHookExampleHandlers());
} else { } else {
// Non self signed, make sure you've added private/public and if needed intermediate to your cert-store. // Non self signed, make sure you've added private/public and if needed intermediate to your cert-store.
// Coming from a set of pem files here's one way to do it: telegramBotsApi = createNoSelfSignedTelegramBotsApi();
// openssl pkcs12 -export -in public.pem -inkey private.pem > keypair.p12 telegramBotsApi.registerBot(new WebHookExampleHandlers());
// keytool -importkeystore -srckeystore keypair.p12 -destkeystore server.jks -srcstoretype pkcs12 }
// have (an) intermediate(s) to supply? first: cat public.pem intermediate.pem > set.pem (use set.pem as -in) return telegramBotsApi;
try { }
TelegramBotsApi telegramBotsWebhookApi = new TelegramBotsApi(BuildVars.pathToCertificateStore, BuildVars.certificateStorePassword, BuildVars.EXTERNALWEBHOOKURL, BuildVars.INTERNALWEBHOOKURL);
telegramBotsWebhookApi.registerBot(new webHookExampleHandlers()); /**
} catch (Exception e) { * @brief Creates a Telegram Bots Api to use Long Polling (getUpdates) bots.
BotLogger.error(LOGTAG, e); * @return TelegramBotsApi to register the bots.
*/
private static TelegramBotsApi createLongPollingTelegramBotsApi() {
return new TelegramBotsApi();
} }
/**
* @brief Creates a Telegram Bots Api to use Long Polling bots and webhooks bots with self-signed certificates.
* @return TelegramBotsApi to register the bots.
*
* @note https://core.telegram.org/bots/self-signed#java-keystore for generating a keypair in store and exporting the pem.
* @note Don't forget to split the pem bundle (begin/end), use only the public key as input!
*/
private static TelegramBotsApi createSelfSignedTelegramBotsApi() throws TelegramApiException {
return new TelegramBotsApi(BuildVars.pathToCertificateStore, BuildVars.certificateStorePassword, BuildVars.EXTERNALWEBHOOKURL, BuildVars.INTERNALWEBHOOKURL, BuildVars.pathToCertificatePublicKey);
} }
/**
* @brief Creates a Telegram Bots Api to use Long Polling bots and webhooks bots with no-self-signed certificates.
* @return TelegramBotsApi to register the bots.
*
* @note Coming from a set of pem files here's one way to do it:
* @code{.sh}
* openssl pkcs12 -export -in public.pem -inkey private.pem > keypair.p12
* keytool -importkeystore -srckeystore keypair.p12 -destkeystore server.jks -srcstoretype pkcs12
* #have (an) intermediate(s) to supply? first:
* cat public.pem intermediate.pem > set.pem (use set.pem as -in)
* @endcode
*/
private static TelegramBotsApi createNoSelfSignedTelegramBotsApi() throws TelegramApiException {
return new TelegramBotsApi(BuildVars.pathToCertificateStore, BuildVars.certificateStorePassword, BuildVars.EXTERNALWEBHOOKURL, BuildVars.INTERNALWEBHOOKURL);
} }
} }

22
src/main/java/org/telegram/updateshandlers/webHookExampleHandlers.java

@ -1,32 +1,29 @@
package org.telegram.updateshandlers; package org.telegram.updateshandlers;
import org.telegram.BotConfig; import org.telegram.BotConfig;
import org.telegram.BuildVars;
import org.telegram.telegrambots.api.methods.BotApiMethod; import org.telegram.telegrambots.api.methods.BotApiMethod;
import org.telegram.telegrambots.api.methods.send.SendMessage; import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Update; import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramWebhookBot; import org.telegram.telegrambots.bots.TelegramWebhookBot;
import org.telegram.telegrambots.logging.BotLogger;
/** /**
* Created by pithera on 5/31/16. * @author pithera
* Yes this is an ugly example, feel free to supply something nice. * @version 1.0
* @brief Simple Webhook example
* @date 31 of May of 2016
*/ */
public class webHookExampleHandlers extends TelegramWebhookBot { public class WebHookExampleHandlers extends TelegramWebhookBot {
@Override @Override
public BotApiMethod onWebhookUpdateReceived(Update update) { public BotApiMethod onWebhookUpdateReceived(Update update) {
BotLogger.severe("UPDATE", update.toString());
if (update.hasMessage() && update.getMessage().hasText()) { if (update.hasMessage() && update.getMessage().hasText()) {
SendMessage sendMessage = new SendMessage(); SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(update.getMessage().getChatId().toString()); sendMessage.setChatId(update.getMessage().getChatId().toString());
sendMessage.setText("Your webhook works!, this is your callback:\n" + BuildVars.EXTERNALWEBHOOKURL + "/" sendMessage.setText("Well, all information looks like noise until you break the code.");
+ "callback/" + getBotPath());
return sendMessage; return sendMessage;
} }
return null; return null;
} }
@Override @Override
public String getBotUsername() { public String getBotUsername() {
return BotConfig.USERNAMEWEBHOOK; return BotConfig.USERNAMEWEBHOOK;
@ -39,9 +36,6 @@ public class webHookExampleHandlers extends TelegramWebhookBot {
@Override @Override
public String getBotPath() { public String getBotPath() {
return BotConfig.USERNAMEWEBHOOK; return BotConfig.USERNAMEWEBHOOK; //arbitrary path to deliver updates on, username is an example.
} //arbitrary path to deliver updates on, username is an example. }
} }

Loading…
Cancel
Save