diff --git a/build.gradle.kts b/build.gradle.kts
index d2fac22..55da747 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -24,7 +24,10 @@ dependencies {
implementation("org.apache.logging.log4j:log4j-1.2-api:2.24.3")
implementation("org.apache.logging.log4j:log4j-core:2.24.3")
implementation("org.apache.logging.log4j:log4j-slf4j2-impl:2.24.3")
- implementation("org.telegram:telegrambots-abilities:8.0.0")
+ // implementation("org.telegram:telegrambots-abilities:8.0.0")
+ implementation("org.telegram:telegrambots-client:8.0.0")
+ implementation("org.telegram:telegrambots-extensions:8.0.0")
+ implementation("org.telegram:telegrambots-longpolling:8.0.0")
testAnnotationProcessor("org.projectlombok:lombok:1.18.36")
testImplementation(platform("org.junit:junit-bom:5.11.4"))
diff --git a/src/main/java/com/miti99/storescraperbot/Main.java b/src/main/java/com/miti99/storescraperbot/Main.java
index 7139c2b..882ac9b 100644
--- a/src/main/java/com/miti99/storescraperbot/Main.java
+++ b/src/main/java/com/miti99/storescraperbot/Main.java
@@ -1,18 +1,20 @@
package com.miti99.storescraperbot;
-// TIP To Run code, press or
-// click the icon in the gutter.
+import com.miti99.storescraperbot.bot.StoreScrapeBot;
+import com.miti99.storescraperbot.config.Config;
+import lombok.extern.log4j.Log4j2;
+import org.telegram.telegrambots.longpolling.TelegramBotsLongPollingApplication;
+
+@Log4j2
public class Main {
public static void main(String[] args) {
- // TIP Press with your caret at the highlighted text
- // to see how IntelliJ IDEA suggests fixing it.
- System.out.printf("Hello and welcome!");
-
- for (int i = 1; i <= 5; i++) {
- // TIP Press to start debugging your code. We have set one breakpoint
- // for you, but you can always add more by pressing .
- System.out.println("i = " + i);
+ try (var botsApplication = new TelegramBotsLongPollingApplication()) {
+ botsApplication.registerBot(Config.TELEGRAM_BOT_TOKEN, StoreScrapeBot.INSTANCE);
+ log.info("StoreScrapeBot successfully started!");
+ Thread.currentThread().join();
+ } catch (Exception e) {
+ log.error("Error while running bot", e);
}
}
}
diff --git a/src/main/java/com/miti99/storescraperbot/bot/ScoreScrapeBotTelegramClient.java b/src/main/java/com/miti99/storescraperbot/bot/ScoreScrapeBotTelegramClient.java
new file mode 100644
index 0000000..2e8373c
--- /dev/null
+++ b/src/main/java/com/miti99/storescraperbot/bot/ScoreScrapeBotTelegramClient.java
@@ -0,0 +1,12 @@
+package com.miti99.storescraperbot.bot;
+
+import com.miti99.storescraperbot.config.Config;
+import org.telegram.telegrambots.client.okhttp.OkHttpTelegramClient;
+
+public class ScoreScrapeBotTelegramClient extends OkHttpTelegramClient {
+ public static final ScoreScrapeBotTelegramClient INSTANCE = new ScoreScrapeBotTelegramClient();
+
+ public ScoreScrapeBotTelegramClient() {
+ super(Config.TELEGRAM_BOT_TOKEN);
+ }
+}
diff --git a/src/main/java/com/miti99/storescraperbot/bot/ScoreScrapeBotUsernameSupplier.java b/src/main/java/com/miti99/storescraperbot/bot/ScoreScrapeBotUsernameSupplier.java
new file mode 100644
index 0000000..9f5eac6
--- /dev/null
+++ b/src/main/java/com/miti99/storescraperbot/bot/ScoreScrapeBotUsernameSupplier.java
@@ -0,0 +1,14 @@
+package com.miti99.storescraperbot.bot;
+
+import com.miti99.storescraperbot.config.Config;
+import java.util.function.Supplier;
+
+public class ScoreScrapeBotUsernameSupplier implements Supplier {
+ public static final ScoreScrapeBotUsernameSupplier INSTANCE =
+ new ScoreScrapeBotUsernameSupplier();
+
+ @Override
+ public String get() {
+ return Config.TELEGRAM_BOT_USERNAME;
+ }
+}
diff --git a/src/main/java/com/miti99/storescraperbot/bot/StoreScrapeBot.java b/src/main/java/com/miti99/storescraperbot/bot/StoreScrapeBot.java
new file mode 100644
index 0000000..dbf035a
--- /dev/null
+++ b/src/main/java/com/miti99/storescraperbot/bot/StoreScrapeBot.java
@@ -0,0 +1,32 @@
+package com.miti99.storescraperbot.bot;
+
+import com.miti99.storescraperbot.bot.command.AddGroupCommand;
+import lombok.extern.log4j.Log4j2;
+import org.telegram.telegrambots.extensions.bots.commandbot.CommandLongPollingTelegramBot;
+import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
+import org.telegram.telegrambots.meta.api.objects.Update;
+import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
+
+@Log4j2
+public class StoreScrapeBot extends CommandLongPollingTelegramBot {
+ public static final StoreScrapeBot INSTANCE = new StoreScrapeBot();
+
+ StoreScrapeBot() {
+ super(ScoreScrapeBotTelegramClient.INSTANCE, true, ScoreScrapeBotUsernameSupplier.INSTANCE);
+ register(AddGroupCommand.INSTANCE);
+ }
+
+ @Override
+ public void processNonCommandUpdate(Update update) {
+ try {
+ var sendMessage =
+ SendMessage.builder()
+ .chatId(update.getMessage().getChatId())
+ .text("Invalid command")
+ .build();
+ telegramClient.execute(sendMessage);
+ } catch (TelegramApiException e) {
+ log.error("processNonCommandUpdate error", e);
+ }
+ }
+}
diff --git a/src/main/java/com/miti99/storescraperbot/bot/command/AddGroupCommand.java b/src/main/java/com/miti99/storescraperbot/bot/command/AddGroupCommand.java
new file mode 100644
index 0000000..05a6254
--- /dev/null
+++ b/src/main/java/com/miti99/storescraperbot/bot/command/AddGroupCommand.java
@@ -0,0 +1,23 @@
+package com.miti99.storescraperbot.bot.command;
+
+import com.miti99.storescraperbot.config.Config;
+import org.telegram.telegrambots.extensions.bots.commandbot.commands.BotCommand;
+import org.telegram.telegrambots.meta.api.objects.User;
+import org.telegram.telegrambots.meta.api.objects.chat.Chat;
+import org.telegram.telegrambots.meta.generics.TelegramClient;
+
+public class AddGroupCommand extends BotCommand {
+ public static final AddGroupCommand INSTANCE = new AddGroupCommand();
+
+ AddGroupCommand() {
+ super("addgroup", "Thêm group vào list group cho phép sử dụng bot");
+ }
+
+ @Override
+ public void execute(TelegramClient telegramClient, User user, Chat chat, String[] arguments) {
+ if (!Config.ADMIN_IDS.contains(user.getId()) ) {
+ return;
+ }
+ // TODO
+ }
+}
diff --git a/src/main/java/com/miti99/storescraperbot/config/Config.java b/src/main/java/com/miti99/storescraperbot/config/Config.java
index f4ba15b..3fe44aa 100644
--- a/src/main/java/com/miti99/storescraperbot/config/Config.java
+++ b/src/main/java/com/miti99/storescraperbot/config/Config.java
@@ -1,6 +1,11 @@
package com.miti99.storescraperbot.config;
import com.miti99.storescraperbot.type.Env;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
public class Config {
public static final Env ENV = Env.valueOf(System.getenv("ENV"));
@@ -10,4 +15,19 @@ public class Config {
public static final String COUCHBASE_USERNAME = System.getenv("COUCHBASE_USERNAME");
public static final String COUCHBASE_PASSWORD = System.getenv("COUCHBASE_PASSWORD");
public static final String COUCHBASE_BUCKET_NAME = System.getenv("COUCHBASE_BUCKET_NAME");
+
+ public static final String TELEGRAM_BOT_TOKEN = System.getenv("TELEGRAM_BOT_TOKEN");
+ public static final String TELEGRAM_BOT_USERNAME = System.getenv("TELEGRAM_BOT_USERNAME");
+
+ public static final Long CREATOR_ID = Long.parseLong(System.getenv("CREATOR_ID"));
+ public static final Set ADMIN_IDS =
+ Optional.ofNullable(System.getenv("ADMIN_IDS"))
+ .map(
+ v ->
+ Arrays.stream(v.split(","))
+ .map(String::trim)
+ .filter(s -> !s.isEmpty())
+ .map(Long::parseLong)
+ .collect(Collectors.toSet()))
+ .orElse(Collections.emptySet());
}
diff --git a/src/main/java/com/miti99/storescraperbot/util/CouchbaseUtil.java b/src/main/java/com/miti99/storescraperbot/util/CouchbaseUtil.java
index c6f1fc5..bc1f4f7 100644
--- a/src/main/java/com/miti99/storescraperbot/util/CouchbaseUtil.java
+++ b/src/main/java/com/miti99/storescraperbot/util/CouchbaseUtil.java
@@ -8,49 +8,20 @@ import static com.miti99.storescraperbot.config.Config.COUCHBASE_USERNAME;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.ClusterOptions;
-import com.couchbase.client.java.Collection;
-import com.couchbase.client.java.Scope;
-import com.couchbase.client.java.json.JsonObject;
-import com.couchbase.client.java.kv.GetResult;
-import com.couchbase.client.java.kv.MutationResult;
-import com.couchbase.client.java.query.QueryResult;
import java.time.Duration;
public class CouchbaseUtil {
public static final Cluster CLUSTER;
public static final Bucket BUCKET;
+
static {
CLUSTER =
Cluster.connect(
COUCHBASE_CONNECTION_STRING,
ClusterOptions.clusterOptions(COUCHBASE_USERNAME, COUCHBASE_PASSWORD)
- .environment(
- env -> {
- // Customize client settings by calling methods on the "env" variable.
- }));
+ .environment(env -> {}));
- // get a bucket reference
BUCKET = CLUSTER.bucket(COUCHBASE_BUCKET_NAME);
BUCKET.waitUntilReady(Duration.ofSeconds(10));
-
- // get a user-defined collection reference
- Scope scope = BUCKET.scope("tenant_agent_00");
- Collection collection = scope.collection("users");
-
- // Upsert Document
- MutationResult upsertResult =
- collection.upsert("my-document", JsonObject.create().put("name", "mike"));
-
- // Get Document
- GetResult getResult = collection.get("my-document");
- String name = getResult.contentAsObject().getString("name");
- System.out.println(name); // name == "mike"
-
- // Call the query() method on the scope object and store the result.
- Scope inventoryScope = BUCKET.scope("inventory");
- QueryResult result = inventoryScope.query("SELECT * FROM airline WHERE id = 10;");
-
- // Return the result rows with the rowsAsObject() method and print to the terminal.
- System.out.println(result.rowsAsObject());
}
}