merge upstream
This commit is contained in:
commit
a05988f5b4
@ -1,4 +1,5 @@
|
|||||||
* [How to get picture?](#how_to_get_picture)
|
* [How to get picture?](#how_to_get_picture)
|
||||||
|
* [How to display ChatActions like "typing" or "recording a voice message"?](#how_to_sendchataction)
|
||||||
* [How to send photos?](#how_to_send_photos)
|
* [How to send photos?](#how_to_send_photos)
|
||||||
* [How do I send photos by file_id?](#how_to_send_photos_file_id)
|
* [How do I send photos by file_id?](#how_to_send_photos_file_id)
|
||||||
* [How to use custom keyboards?](#how_to_use_custom_keyboards)
|
* [How to use custom keyboards?](#how_to_use_custom_keyboards)
|
||||||
@ -74,6 +75,38 @@ public java.io.File downloadPhotoByFilePath(String filePath) {
|
|||||||
|
|
||||||
The returned `java.io.File` object will be your photo
|
The returned `java.io.File` object will be your photo
|
||||||
|
|
||||||
|
## <a id="how_to_sendchataction"></a>How to display ChatActions like "typing" or "recording a voice message"? ##
|
||||||
|
Quick example here that is showing ChactActions for commands like "/type" or "/record_audio"
|
||||||
|
|
||||||
|
```java
|
||||||
|
if (update.hasMessage() && update.getMessage().hasText()) {
|
||||||
|
|
||||||
|
String text = update.getMessage().getText();
|
||||||
|
|
||||||
|
SendChatAction sendChatAction = new SendChatAction();
|
||||||
|
sendChatAction.setChatId(update.getMessage().getChatId());
|
||||||
|
|
||||||
|
if (text.equals("/type")) {
|
||||||
|
// -> "typing"
|
||||||
|
sendChatAction.setAction(ActionType.TYPING);
|
||||||
|
// -> "recording a voice message"
|
||||||
|
} else if (text.equals("/record_audio")) {
|
||||||
|
sendChatAction.setAction(ActionType.RECORDAUDIO);
|
||||||
|
} else {
|
||||||
|
// -> more actions in the Enum ActionType
|
||||||
|
// For information: https://core.telegram.org/bots/api#sendchataction
|
||||||
|
sendChatAction.setAction(ActionType.UPLOADDOCUMENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Boolean wasSuccessfull = execute(sendChatAction);
|
||||||
|
} catch (TelegramApiException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## <a id="how_to_send_photos"></a>How to send photos? ##
|
## <a id="how_to_send_photos"></a>How to send photos? ##
|
||||||
|
|
||||||
There are several method to send a photo to an user using `sendPhoto` method: With a `file_id`, with an `url` or uploading the file. In this example, we assume that we already have the *chat_id* where we want to send the photo:
|
There are several method to send a photo to an user using `sendPhoto` method: With a `file_id`, with an `url` or uploading the file. In this example, we assume that we already have the *chat_id* where we want to send the photo:
|
||||||
@ -231,8 +264,6 @@ Your main spring boot class should look like this:
|
|||||||
|
|
||||||
```java
|
```java
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
//Add this annotation to enable automatic bots initializing
|
|
||||||
@EnableTelegramBots
|
|
||||||
public class YourApplicationMainClass {
|
public class YourApplicationMainClass {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -246,10 +277,10 @@ public class YourApplicationMainClass {
|
|||||||
|
|
||||||
After that your bot will look like:
|
After that your bot will look like:
|
||||||
```java
|
```java
|
||||||
//Standart Spring component annotation
|
//Standard Spring component annotation
|
||||||
@Component
|
@Component
|
||||||
public class YourBotClassName extends TelegramLongPollingBot {
|
public class YourBotClassName extends TelegramLongPollingBot {
|
||||||
//Bot body.
|
//Bot body.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Also you could just implement LongPollingBot or WebHookBot interfaces. All this bots will be registered in context and connected to Telegram api.
|
Also you could just implement LongPollingBot or WebHookBot interfaces. All this bots will be registered in context and connected to Telegram api.
|
||||||
|
88
TelegramBots.wiki/Handling-Bot-Tokens.md
Normal file
88
TelegramBots.wiki/Handling-Bot-Tokens.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
* [Bot Token Dont's](#bot-token-donts)
|
||||||
|
* [Using Enviroment Variables](#using-environment-variables)
|
||||||
|
* [Setting Enviroment Variables](#setting-environment-variables)
|
||||||
|
* [Accessing Enviroment Variables](#accessing-enviroment-variables)
|
||||||
|
* [Using Command Line Arguments](#using-command-line-arguments)
|
||||||
|
|
||||||
|
# <a id="bot-token-donts"></a> Bot Token Dont's ##
|
||||||
|
* Tokens should not be hardcoded into the bot code
|
||||||
|
* Tokens should never be published
|
||||||
|
* Tokens should not be pushed into Repositorys
|
||||||
|
|
||||||
|
# <a id="using-environment-variables"></a> Using Environment Variables ###
|
||||||
|
One convenient way to inject your bot token into the application is by using Environment Variables. Environment Variables are Values that are set in the Environment the Bot is running.
|
||||||
|
|
||||||
|
Those Values are not defined in the Application and therefore are not visible in the code.
|
||||||
|
|
||||||
|
## <a id="setting-environment-variables"></a> Setting Environment Variables ###
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
Enviroment Variables in Windows can be set using the Console (CMD) using
|
||||||
|
```batchfile
|
||||||
|
SETX [VARIABLE_NAME] [YOUR_BOT_TOKEN]
|
||||||
|
```
|
||||||
|
|
||||||
|
It can also be set using the Windows GUI
|
||||||
|
* From the desktop, right click the Computer icon.
|
||||||
|
* Choose Properties from the context menu.
|
||||||
|
* Click the Advanced system settings link.
|
||||||
|
* Click Environment Variables...
|
||||||
|
* In the 'User Variables for X' click New and enter a Name and your Token as the Value
|
||||||
|
|
||||||
|
### Linux & Mac
|
||||||
|
* Open the '~/.bash_profile' File
|
||||||
|
* Append the following to it:
|
||||||
|
```bash
|
||||||
|
export VARIABLE_NAME = {YOUR_BOT_TOKEN}
|
||||||
|
```
|
||||||
|
* Save the file
|
||||||
|
* Either reboot your system or run the command above in your terminal
|
||||||
|
|
||||||
|
### IntelliJ
|
||||||
|
* Go to Run->Edit Configuratuions...
|
||||||
|
* Navigate to your Java Run Configuration
|
||||||
|
* Under Enviroment->Enviroment Variables click the Folder Icon
|
||||||
|
* Click the Plus Icon to add a new Variable
|
||||||
|
* Enter a Name and your Token as the Value
|
||||||
|
|
||||||
|
###Heroku Cloud
|
||||||
|
* Naviage to your App
|
||||||
|
* In the Settings Tab under Config Vars, click "Reveal Config Vars"
|
||||||
|
* Enter a Name and your Token as the Value
|
||||||
|
* Click the "Add" button
|
||||||
|
|
||||||
|
## <a id="accessing-enviroment-variables"></a> Accessing Enviroment Variables ##
|
||||||
|
|
||||||
|
### Java
|
||||||
|
You can access the Enviroment Variables by using System.getEnv()
|
||||||
|
|
||||||
|
```java
|
||||||
|
String BOT_TOKEN = System.getenv("VARIABLE_NAME");
|
||||||
|
```
|
||||||
|
|
||||||
|
### Spring
|
||||||
|
|
||||||
|
In Spring the @Value annotation allows you to inject the Value into your class
|
||||||
|
```java
|
||||||
|
public class Bot extends TelegramLongPollingBot {
|
||||||
|
public Bot(@Value("${VARIABLE_NAME") String botToken) {
|
||||||
|
this.botToken = botToken;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# <a id="sing-command-line-arguments"></a> Using Command Line Arguments
|
||||||
|
An easier but not Recommended way of injecting the Bottoken is by utilizing Command Line Arguments when starting the Application
|
||||||
|
|
||||||
|
In this case your main Method is responsible for taking in the Token
|
||||||
|
|
||||||
|
```java
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String botToken = args[0];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You now have to call your jar by using
|
||||||
|
```
|
||||||
|
java -jar myBot.jar [BOT_TOKEN]
|
||||||
|
```
|
@ -1,3 +1,3 @@
|
|||||||
Welcome to the TelegramBots wiki. Use the sidebar on the right. If you're not sure what to look at, why not take a look at the [[Getting Started|Getting-Started]] guide?
|
Welcome to the TelegramBots wiki. Use the sidebar on the right. If you're not sure what to look at, why not take a look at the [[Getting Started|Getting-Started]] guide?
|
||||||
|
|
||||||
If you want more detailed explanations, you can also visit this [gitbook by MonsterDeveloper's](https://www.gitbook.com/book/monsterdeveloper/writing-telegram-bots-on-java/details)
|
If you want more detailed explanations, you can also visit this [gitbook by MonsterDeveloper's](https://monsterdeveloper.gitbooks.io/writing-telegram-bots-on-java/content/)
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
* [[Errors Handling]]
|
* [[Errors Handling]]
|
||||||
* [[Using HTTP Proxy]]
|
* [[Using HTTP Proxy]]
|
||||||
* [[FAQ]]
|
* [[FAQ]]
|
||||||
|
* [[Handling Bot Tokens]]
|
||||||
* AbilityBot
|
* AbilityBot
|
||||||
* [[Simple Example]]
|
* [[Simple Example]]
|
||||||
* [[Hello Ability]]
|
* [[Hello Ability]]
|
||||||
|
@ -4,6 +4,7 @@ import org.telegram.telegrambots.meta.api.interfaces.Validable;
|
|||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Ruben Bermudez
|
* @author Ruben Bermudez
|
||||||
@ -20,6 +21,10 @@ public class KeyboardRow extends ArrayList<KeyboardButton> implements Validable
|
|||||||
super.add(index, new KeyboardButton(text));
|
super.add(index, new KeyboardButton(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addAll(List<String> buttonNames) {
|
||||||
|
buttonNames.forEach(name -> super.add(new KeyboardButton(name)));
|
||||||
|
}
|
||||||
|
|
||||||
public boolean contains(String text) {
|
public boolean contains(String text) {
|
||||||
return super.contains(new KeyboardButton(text));
|
return super.contains(new KeyboardButton(text));
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static java.util.Arrays.asList;
|
||||||
|
import static org.hamcrest.core.Is.is;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
public class KeyboardRowTest {
|
||||||
|
|
||||||
|
private static final List<String> BUTTON_NAMES = asList("Carlotta Valdes", "Jimmy Stewart");
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldAddAllButtons() {
|
||||||
|
final KeyboardRow keyboardRow = new KeyboardRow();
|
||||||
|
keyboardRow.addAll(BUTTON_NAMES);
|
||||||
|
assertThat(keyboardRow.size(), is(2));
|
||||||
|
assertThat(keyboardRow.get(0).getText(), is("Carlotta Valdes"));
|
||||||
|
assertThat(keyboardRow.get(1).getText(), is("Jimmy Stewart"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldAddNoButtons() {
|
||||||
|
final KeyboardRow keyboardRow = new KeyboardRow();
|
||||||
|
keyboardRow.addAll(new ArrayList<String>());
|
||||||
|
assertTrue(keyboardRow.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -52,10 +52,10 @@ public class YourApplicationMainClass {
|
|||||||
|
|
||||||
After that your bot will look like:
|
After that your bot will look like:
|
||||||
```java
|
```java
|
||||||
//Standart Spring component annotation
|
//Standard Spring component annotation
|
||||||
@Component
|
@Component
|
||||||
public class YourBotName extends TelegramLongPollingBot {
|
public class YourBotName extends TelegramLongPollingBot {
|
||||||
//Bot body.
|
//Bot body.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Also you could just implement LongPollingBot or WebHookBot interfaces. All this bots will be registered in context and connected to Telegram api.
|
Also you could just implement LongPollingBot or WebHookBot interfaces. All this bots will be registered in context and connected to Telegram api.
|
||||||
|
@ -641,7 +641,7 @@ public abstract class DefaultAbsSender extends AbsSender {
|
|||||||
assertParamNotNull(sendAnimation, "sendAnimation");
|
assertParamNotNull(sendAnimation, "sendAnimation");
|
||||||
sendAnimation.validate();
|
sendAnimation.validate();
|
||||||
try {
|
try {
|
||||||
String url = getBaseUrl() + SendVoice.PATH;
|
String url = getBaseUrl() + SendAnimation.PATH;
|
||||||
HttpPost httppost = configuredHttpPost(url);
|
HttpPost httppost = configuredHttpPost(url);
|
||||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||||
builder.setLaxMode();
|
builder.setLaxMode();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user