telegem 3.3.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d2afc9e262ffced76a28974a69c6e652bf433b2b6da80c6827d45e6da43002a
4
- data.tar.gz: 61f440f2523473e3f5435075bfece0519c374f4aa498d789cc6752c5ce285abf
3
+ metadata.gz: 3a7cc82173aa5648e1b1d119971c9fec495db0bb9f2764135ffa15bd5c641e1e
4
+ data.tar.gz: ec409f5eecba8209c1f1f7e6237f2eddddebb67251fe9ffe4d8f329845256758
5
5
  SHA512:
6
- metadata.gz: 378d55910d0b38b255b35ea357af4cb88f45000362b9d16688dff82a02fe3e5119e71e591c2cec61556d9c9cc82c0edd914ba7cd153ba1cae04c0e97b3f6d229
7
- data.tar.gz: 527cb2833282c03d7f19145d7421e6df5d867ffbb479846ac9e969a8be339450c7358fdefaced5952dfc7d96b999348253a2494b2a2fe3d9c55480073587a421
6
+ metadata.gz: 0e3eaf7311d7cf248b0b59bfa1e0fd7a4ae745129dae8abc0d6a50be55b85c8d86a399913585e72b70fbff935e07450418d6085d2e3ce7ba8e6de3999235593c
7
+ data.tar.gz: 93f600342a065a36014d8e3d0c37c455ec1bfe1db9ac43801ce5b9cb04d66906dd036b7b239f2e47359bb36cb324ed2fdb3894d56ea146abafd9c20612670a06
data/.rubocop.yml ADDED
@@ -0,0 +1,57 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.3
3
+ NewCops: enable
4
+ DisplayCopNames: true
5
+ Exclude:
6
+ - 'bin/**/*'
7
+ - 'node_modules/**/*'
8
+ - 'vendor/**/*'
9
+ - 'tmp/**/*'
10
+ - 'log/**/*'
11
+ - 'db/schema.rb'
12
+
13
+ # Optional: enable extra cops if you add gems (rubocop-performance, rubocop-rspec, rubocop-security)
14
+ # require:
15
+ # - rubocop-performance
16
+ # - rubocop-rspec
17
+ # - rubocop-security
18
+
19
+ Layout/LineLength:
20
+ Max: 100
21
+
22
+ Layout/IndentationWidth:
23
+ Width: 2
24
+
25
+ Metrics/MethodLength:
26
+ Max: 30
27
+ CountComments: false
28
+
29
+ Metrics/BlockLength:
30
+ Exclude:
31
+ - 'spec/**/*'
32
+ - 'test/**/*'
33
+ Max: 200
34
+
35
+ Style/StringLiterals:
36
+ EnforcedStyle: single_quotes
37
+
38
+ Style/FrozenStringLiteralComment:
39
+ Enabled: true
40
+
41
+ Naming/PredicateName:
42
+ Enabled: true
43
+
44
+ Lint/UnusedMethodArgument:
45
+ Enabled: true
46
+
47
+ Lint/UselessAssignment:
48
+ Enabled: true
49
+
50
+ Style/Documentation:
51
+ Enabled: false
52
+
53
+ # Allow longer files for generated code
54
+ Metrics/LineLength:
55
+ Exclude:
56
+ - 'assets/**/*'
57
+ - 'vendor/**/*'
data/CHANGELOG.md CHANGED
@@ -1,6 +1,24 @@
1
1
  # Telegem Changelog
2
2
 
3
- ## v3.3.1(lastest)
3
+ ## v3.4.0(latest)
4
+
5
+ - added bot api 9.6 full support
6
+ - all fixes from v3.3.2-rc.1
7
+
8
+
9
+ ## v3.3.2-rc.1
10
+
11
+ ### Fixed
12
+ - Webhook `set_webhook` now correctly passes URL as positional argument
13
+ - Removed unsafe thread usage in `Context#with_typing` (async-safe now)
14
+ - Added automatic retry with exponential backoff in API client
15
+ - Improved `telegem-ssl` to detect dnf/yum on Fedora/RHEL
16
+
17
+ ### Changed
18
+ - No breaking changes. Safe upgrade from v3.3.1.
19
+
20
+
21
+ ## v3.3.1
4
22
  ### Features
5
23
  - improved memeorystore to include diskbackup
6
24
  - added 'telegem-init' cli
data/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # Telegem Documentation
2
+
3
+ Welcome to the comprehensive documentation for Telegem, a modern Ruby framework for building Telegram bots.
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/telegem.svg)](https://badge.fury.io/rb/telegem)
6
+ [![Join Telegram Group](https://img.shields.io/badge/Telegram-Join%20Group-2CA5E0?style=flat-square&logo=telegram&logoColor=white)](https://t.me/r_telegem)
7
+
8
+
9
+
10
+ ## Table of Contents
11
+
12
+ ### Getting Started
13
+ - [README](README.md) - Main project README
14
+ - [Getting Started](getting_started.md) - Installation and basic setup
15
+ - [Core Concepts](core_concepts.md) - Understanding Telegem architecture
16
+
17
+ ### Core Components
18
+ - [Bot](bot.md) - Main bot class and configuration
19
+ - [Context](context.md) - Update context and response methods
20
+ - [Handlers](handlers.md) - Command, hears, and event handlers
21
+ - [Middleware](middleware.md) - Request processing pipeline
22
+ - [Scenes](scenes.md) - Multi-step conversation flows
23
+ - [Sessions](sessions.md) - Data persistence between updates
24
+
25
+ ### API & Types
26
+ - [API](api.md) - Telegram API client usage
27
+ - [Types](types.md) - Type-safe API response handling
28
+ - [Keyboards](keyboards.md) - Inline and reply keyboard DSL
29
+
30
+ ### Advanced Features
31
+ - [Plugins](plugins.md) - Built-in and custom plugins
32
+ - [Webhooks](webhooks.md) - Production webhook deployment
33
+ - [Error Handling](error_handling.md) - Comprehensive error management
34
+ - [Testing](testing.md) - Unit and integration testing
35
+ - [Deployment](deployment.md) - Production deployment guides
36
+
37
+ ### Examples & Guides
38
+ - [Examples](examples.md) - Complete bot examples
39
+ - [Troubleshooting](troubleshooting.md) - Common issues and solutions
40
+ - [Contributing](contributing.md) - Development guidelines
41
+ - [Changelog](changelog.md) - Version history and changes
42
+
43
+ ## Quick Start
44
+
45
+ 1. **Install Telegem:**
46
+ ```bash
47
+ gem install telegem
48
+ ```
49
+
50
+ 2. **Create your first bot:**
51
+ ```ruby
52
+ require 'telegem'
53
+
54
+ bot = Telegem.new(token: 'YOUR_BOT_TOKEN')
55
+
56
+ bot.command('start') do |ctx|
57
+ ctx.reply('Hello, World!')
58
+ end
59
+
60
+ bot.start_polling
61
+ ```
62
+
63
+ 3. **Explore features:**
64
+ - Add [handlers](handlers.md) for different message types
65
+ - Use [sessions](sessions.md) for data persistence
66
+ - Implement [scenes](scenes.md) for complex conversations
67
+ - Deploy with [webhooks](webhooks.md) for production
68
+
69
+ ## Key Features
70
+
71
+ - **Async I/O**: Built on the Async gem for high performance
72
+ - **Type Safety**: Automatic type conversion for API responses
73
+ - **Session Management**: Built-in session stores (Memory, Redis)
74
+ - **Plugin System**: Extensible with custom plugins
75
+ - **Scene System**: Complex conversation flows
76
+ - **Middleware**: Request processing pipeline
77
+ - **Error Handling**: Comprehensive error recovery
78
+ - **Testing**: Full test suite with mocking support
79
+
80
+ ## Architecture Overview
81
+
82
+ ```
83
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
84
+ │ Telegram API │◄──►│ API Client │◄──►│ Handlers │
85
+ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
86
+ ā–²
87
+ │
88
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
89
+ │ Middleware │
90
+ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
91
+ ā–²
92
+ │
93
+ ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
94
+ │ Sessions │
95
+ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
96
+ ```
97
+
98
+ ## Support
99
+
100
+ - **Documentation**: You're reading it!
101
+ - **Issues**: [GitHub Issues](https://github.com/telegem/telegem/issues)
102
+ - **Discussions**: [GitHub Discussions](https://github.com/telegem/telegem/discussions)
103
+ - **Examples**: Check the `examples/` directory
104
+
105
+ ## Contributing
106
+
107
+ We welcome contributions! See our [contributing guide](contributing.md) for details.
108
+
109
+ ## License
110
+
111
+ Telegem is released under the MIT License. See the main README for details.
112
+
113
+ ---
114
+
115
+ **Happy bot building with Telegem! šŸ¤–**
116
+
117
+ ```ruby
118
+ gem 'telegem'
119
+ ```
120
+
121
+ ## Basic Usage
122
+
123
+ ```ruby
124
+ require 'telegem'
125
+
126
+ bot = Telegem.new('YOUR_BOT_TOKEN')
127
+
128
+ bot.command('start') do |ctx|
129
+ ctx.reply("Hello, #{ctx.from.first_name}!")
130
+ end
131
+
132
+ bot.start_polling
133
+ ```
134
+
135
+ ## Requirements
136
+
137
+ - Ruby 3.0+
138
+ - Telegram Bot Token from [@BotFather](https://t.me/botfather)
139
+
140
+ ## License
141
+
142
+ MIT License - see [LICENSE](../LICENSE) file for details.
143
+
144
+ ## Contributing
145
+
146
+ See [Contributing Guide](contributing.md) for development setup and contribution guidelines.</content>
147
+ <parameter name="filePath">/home/slick/telegem/docs/README.md
data/bin/telegem-ssl CHANGED
@@ -4,48 +4,94 @@
4
4
  require 'fileutils'
5
5
  require 'yaml'
6
6
 
7
- puts "šŸ” Telegem SSL Setup"
8
- puts "=" * 10
7
+ puts "Telegem SSL Setup"
8
+ puts "=" * 40
9
9
 
10
+ # Check for existing config
10
11
  if File.exist?('.telegem-ssl')
11
- puts "🚫 SSL config already exists at .telegem-ssl"
12
+ puts "SSL config already exists at .telegem-ssl"
12
13
  print "Overwrite? (y/n): "
13
- exit unless gets.chomp.downcase == 'y'
14
+ response = gets.chomp.downcase
15
+ unless response == 'y'
16
+ puts "Setup cancelled."
17
+ exit 1
18
+ end
14
19
  end
15
20
 
16
21
  # Get domain
17
22
  domain = ARGV[0]
18
23
  unless domain
19
- print "🌐 Enter domain (e.g., bot.example.com): "
24
+ print "Enter domain (e.g., bot.example.com): "
20
25
  domain = gets.chomp
21
26
  end
22
27
 
23
- # Get email
28
+ # Get email
24
29
  email = ARGV[1] || "admin@#{domain}"
25
30
 
26
- # Check certbot
27
- unless system("which certbot > /dev/null")
28
- puts "šŸ“¦ Installing certbot..."
29
- system("sudo apt update && sudo apt install -y certbot")
31
+ # Detect package manager and install certbot
32
+ def install_certbot
33
+ return true if system("command -v certbot > /dev/null 2>&1")
34
+
35
+ puts "Installing certbot..."
36
+
37
+ case
38
+ when system("command -v apt > /dev/null 2>&1")
39
+ system("sudo apt update && sudo apt install -y certbot")
40
+ when system("command -v dnf > /dev/null 2>&1")
41
+ system("sudo dnf install -y certbot")
42
+ when system("command -v yum > /dev/null 2>&1")
43
+ system("sudo yum install -y certbot")
44
+ when system("command -v brew > /dev/null 2>&1")
45
+ system("brew install certbot")
46
+ else
47
+ puts "Could not detect package manager. Please install certbot manually:"
48
+ puts " https://certbot.eff.org/instructions"
49
+ return false
50
+ end
51
+
52
+ system("command -v certbot > /dev/null 2>&1")
53
+ end
54
+
55
+ unless install_certbot
56
+ puts "Failed to install certbot. Exiting."
57
+ exit 1
30
58
  end
31
59
 
32
60
  # Generate certificate
33
- puts "\nšŸ“„ Getting SSL certificate..."
61
+ puts "Getting SSL certificate..."
62
+
63
+ # Try standalone mode first, fall back to webroot
34
64
  cert_cmd = "sudo certbot certonly --standalone -d #{domain} --email #{email} --agree-tos --non-interactive"
35
65
  puts "Running: #{cert_cmd}"
36
66
 
37
- if system(cert_cmd)
38
- # Create config
39
- config = {
40
- domain: domain,
41
- cert_path: "/etc/letsencrypt/live/#{domain}/fullchain.pem",
42
- key_path: "/etc/letsencrypt/live/#{domain}/privkey.pem"
43
- }
67
+ unless system(cert_cmd)
68
+ puts "Standalone mode failed. Trying webroot mode..."
69
+ print "Enter webroot path (e.g., /var/www/html): "
70
+ webroot = gets.chomp
44
71
 
45
- File.write(".telegem-ssl", config.to_yaml)
46
- puts "āœ… SSL configured! Certificate valid for 90 days."
47
- puts "šŸ“ Config saved to .telegem-ssl"
48
- puts "\nšŸš€ Start your bot: ruby bot.rb"
49
- else
50
- puts "āŒ Failed to get certificate. Check domain and try again."
51
- end
72
+ cert_cmd = "sudo certbot certonly --webroot -w #{webroot} -d #{domain} --email #{email} --agree-tos --non-interactive"
73
+ puts "Running: #{cert_cmd}"
74
+
75
+ unless system(cert_cmd)
76
+ puts "Failed to get certificate. Check domain and try again."
77
+ exit 1
78
+ end
79
+ end
80
+
81
+ # Create config
82
+ config = {
83
+ domain: domain,
84
+ cert_path: "/etc/letsencrypt/live/#{domain}/fullchain.pem",
85
+ key_path: "/etc/letsencrypt/live/#{domain}/privkey.pem"
86
+ }
87
+
88
+ File.write(".telegem-ssl", config.to_yaml)
89
+ puts "SSL configured. Certificate valid for 90 days."
90
+ puts "Config saved to .telegem-ssl"
91
+
92
+ # Auto-renewal instructions
93
+ puts "\nAuto-renewal setup (recommended):"
94
+ puts " Add this to crontab (crontab -e):"
95
+ puts " 0 0 1 * * certbot renew --quiet && systemctl reload your-bot"
96
+
97
+ puts "\nStart your bot: ruby bot.rb"