mirror of
https://github.com/house-of-vanity/OutFleet.git
synced 2025-08-21 14:37:16 +00:00
Added TG bot
This commit is contained in:
70
telegram_bot/migrations/0001_initial.py
Normal file
70
telegram_bot/migrations/0001_initial.py
Normal file
@@ -0,0 +1,70 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 11:18
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='BotSettings',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('bot_token', models.CharField(help_text='Telegram Bot Token from @BotFather', max_length=255)),
|
||||
('enabled', models.BooleanField(default=False, help_text='Enable/Disable the bot')),
|
||||
('welcome_message', models.TextField(default='Hello! Your message has been received. An administrator will review it.', help_text='Message sent when user starts conversation')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Bot Settings',
|
||||
'verbose_name_plural': 'Bot Settings',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BotStatus',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('is_running', models.BooleanField(default=False)),
|
||||
('last_started', models.DateTimeField(blank=True, null=True)),
|
||||
('last_stopped', models.DateTimeField(blank=True, null=True)),
|
||||
('last_error', models.TextField(blank=True)),
|
||||
('last_update_id', models.BigIntegerField(blank=True, help_text='Last processed update ID from Telegram', null=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Bot Status',
|
||||
'verbose_name_plural': 'Bot Status',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TelegramMessage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('direction', models.CharField(choices=[('incoming', 'Incoming'), ('outgoing', 'Outgoing')], db_index=True, max_length=10)),
|
||||
('telegram_user_id', models.BigIntegerField(db_index=True)),
|
||||
('telegram_username', models.CharField(blank=True, db_index=True, max_length=255, null=True)),
|
||||
('telegram_first_name', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('telegram_last_name', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('chat_id', models.BigIntegerField(db_index=True)),
|
||||
('message_id', models.BigIntegerField(blank=True, null=True)),
|
||||
('message_text', models.TextField(blank=True)),
|
||||
('raw_data', models.JSONField(blank=True, default=dict, help_text='Full message data from Telegram')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
|
||||
('linked_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='telegram_messages', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Telegram Message',
|
||||
'verbose_name_plural': 'Telegram Messages',
|
||||
'ordering': ['-created_at'],
|
||||
'indexes': [models.Index(fields=['-created_at', 'direction'], name='telegram_bo_created_19b81b_idx'), models.Index(fields=['telegram_user_id', '-created_at'], name='telegram_bo_telegra_f71f27_idx')],
|
||||
},
|
||||
),
|
||||
]
|
33
telegram_bot/migrations/0002_add_connection_settings.py
Normal file
33
telegram_bot/migrations/0002_add_connection_settings.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 12:09
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('telegram_bot', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='botsettings',
|
||||
name='api_base_url',
|
||||
field=models.URLField(blank=True, default='https://api.telegram.org', help_text='Telegram API base URL (change for local bot API server)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='botsettings',
|
||||
name='connection_timeout',
|
||||
field=models.IntegerField(default=30, help_text='Connection timeout in seconds'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='botsettings',
|
||||
name='proxy_url',
|
||||
field=models.URLField(blank=True, help_text='Proxy URL (e.g., http://proxy:8080 or socks5://proxy:1080)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='botsettings',
|
||||
name='use_proxy',
|
||||
field=models.BooleanField(default=False, help_text='Enable proxy for Telegram API connections'),
|
||||
),
|
||||
]
|
42
telegram_bot/migrations/0003_accessrequest.py
Normal file
42
telegram_bot/migrations/0003_accessrequest.py
Normal file
@@ -0,0 +1,42 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 12:24
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('telegram_bot', '0002_add_connection_settings'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AccessRequest',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('telegram_user_id', models.BigIntegerField(db_index=True, help_text='Telegram user ID who made the request')),
|
||||
('telegram_username', models.CharField(blank=True, help_text='Telegram username (without @)', max_length=255, null=True)),
|
||||
('telegram_first_name', models.CharField(blank=True, help_text='First name from Telegram', max_length=255, null=True)),
|
||||
('telegram_last_name', models.CharField(blank=True, help_text='Last name from Telegram', max_length=255, null=True)),
|
||||
('message_text', models.TextField(help_text='The message sent by user when requesting access')),
|
||||
('chat_id', models.BigIntegerField(help_text='Telegram chat ID for sending notifications')),
|
||||
('status', models.CharField(choices=[('pending', 'Pending'), ('approved', 'Approved'), ('rejected', 'Rejected')], db_index=True, default='pending', max_length=20)),
|
||||
('admin_comment', models.TextField(blank=True, help_text='Admin comment for approval/rejection')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('processed_at', models.DateTimeField(blank=True, null=True)),
|
||||
('created_user', models.ForeignKey(blank=True, help_text='User created from this request (when approved)', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
|
||||
('first_message', models.ForeignKey(blank=True, help_text='First message from this user', null=True, on_delete=django.db.models.deletion.SET_NULL, to='telegram_bot.telegrammessage')),
|
||||
('processed_by', models.ForeignKey(blank=True, help_text='Admin who processed this request', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='processed_requests', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Access Request',
|
||||
'verbose_name_plural': 'Access Requests',
|
||||
'ordering': ['-created_at'],
|
||||
'indexes': [models.Index(fields=['telegram_user_id'], name='telegram_bo_telegra_e3429d_idx'), models.Index(fields=['status', '-created_at'], name='telegram_bo_status_cf9310_idx'), models.Index(fields=['-created_at'], name='telegram_bo_created_c82a74_idx')],
|
||||
'constraints': [models.UniqueConstraint(fields=('telegram_user_id',), name='unique_telegram_user_request')],
|
||||
},
|
||||
),
|
||||
]
|
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 13:49
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('telegram_bot', '0003_accessrequest'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveIndex(
|
||||
model_name='accessrequest',
|
||||
name='telegram_bo_status_cf9310_idx',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='accessrequest',
|
||||
name='status',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='accessrequest',
|
||||
name='approved',
|
||||
field=models.BooleanField(db_index=True, default=False, help_text='Request approved by administrator'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='accessrequest',
|
||||
name='admin_comment',
|
||||
field=models.TextField(blank=True, help_text='Admin comment for approval'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='accessrequest',
|
||||
index=models.Index(fields=['approved', '-created_at'], name='telegram_bo_approve_7ae92d_idx'),
|
||||
),
|
||||
]
|
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 22:24
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('telegram_bot', '0004_remove_accessrequest_telegram_bo_status_cf9310_idx_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='BotStatus',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='botsettings',
|
||||
name='welcome_message',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='botsettings',
|
||||
name='help_message',
|
||||
field=models.TextField(default='📋 Available commands:\n/start - Start conversation\n📊 Access - View your VPN subscriptions\n\nFor support contact administrator.', help_text='Help message sent for unrecognized commands'),
|
||||
),
|
||||
]
|
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 22:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('telegram_bot', '0005_delete_botstatus_remove_botsettings_welcome_message_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='accessrequest',
|
||||
name='desired_username',
|
||||
field=models.CharField(blank=True, help_text='Desired username for VPN user (defaults to Telegram username)', max_length=150),
|
||||
),
|
||||
]
|
@@ -0,0 +1,27 @@
|
||||
# Generated by Django 5.1.7 on 2025-08-14 22:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('telegram_bot', '0006_accessrequest_desired_username'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='botsettings',
|
||||
name='help_message',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='accessrequest',
|
||||
name='user_language',
|
||||
field=models.CharField(default='en', help_text="User's preferred language (en/ru)", max_length=10),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='telegrammessage',
|
||||
name='user_language',
|
||||
field=models.CharField(default='en', help_text="User's preferred language (en/ru)", max_length=10),
|
||||
),
|
||||
]
|
0
telegram_bot/migrations/__init__.py
Normal file
0
telegram_bot/migrations/__init__.py
Normal file
Reference in New Issue
Block a user