diff --git a/src/bot/mod.rs b/src/bot/mod.rs
index 433a6cab..3b53b1f2 100644
--- a/src/bot/mod.rs
+++ b/src/bot/mod.rs
@@ -72,3 +72,34 @@ impl Bot {
         &self.client
     }
 }
+
+#[derive(Debug)]
+struct BotBuilder {
+    token: Option<String>,
+    client: Option<Client>,
+}
+
+impl BotBuilder {
+    #[must_use]
+    pub fn new() -> Self {
+        Self { token: None, client: None }
+    }
+
+    #[must_use]
+    pub fn client(mut self, client: Client) -> Self {
+        self.client = Some(client);
+        self
+    }
+
+    #[must_use]
+    pub fn token(mut self, token: S) -> Self where S: Into<String> {
+        self.token = Some(token.into());
+        self
+    }
+
+    #[must_use]
+    pub fn build(self) -> Bot {
+        Bot { client: self.client.unwrap_or(Client::new()), token: self.token.unwrap_or(std::env::var("TELOXIDE_TOKEN")
+            .expect("Cannot get the TELOXIDE_TOKEN env variable"))}
+    }
+}