সিস্টেম ওভারভিউ
এই বট ম্যানেজমেন্ট সিস্টেম বিভিন্ন সোশ্যাল মিডিয়া প্ল্যাটফর্মে (F2F, OnlyFans, FanCentro ইত্যাদি) অটোমেটেড বট পরিচালনার জন্য ডিজাইন করা হয়েছে। সিস্টেমটি সাবস্ক্রিপশন-ভিত্তিক এবং স্বয়ংক্রিয়ভাবে পেমেন্ট এক্সপায়ার হলে অ্যাক্সেস বন্ধ করে দেয়।
১. অ্যাডমিন কাজের ধাপসমূহ
১.১ অ্যাডমিন লগইন
১. Django Admin Panel এ যান: /admin/
২. সুপারইউজার ক্রেডেনশিয়াল দিয়ে লগইন করুন
৩. ড্যাশবোর্ডে প্রবেশ করুন১.২ বট কনফিগারেশন তৈরি (GlobalConfig)
ধাপ ১: নতুন কনফিগারেশন যোগ করা
১. Admin Panel → Bot Global Config → Add New
২. নিম্নলিখিত তথ্য পূরণ করুন:
- Name: "F2F Mass DM Bot" (উদাহরণ)
- Owner: Admin User সিলেক্ট করুন
- Platform: "f2f" সিলেক্ট করুন
- Base URL: "https://f2f.com/"
- Bot Type: "mass_dm" সিলেক্ট করুন
- Executable Path: "/usr/bin/chromedriver"
- Headless: True (চেক করুন)
- Status: "active" সিলেক্ট করুন
৩. Save বাটনে ক্লিক করুনরেকর্ড সেভ হওয়ার প্রক্রিয়া:
- সিস্টেম স্বয়ংক্রিয়ভাবে
created_atএবংupdated_atফিল্ড আপডেট করে unique_togetherকনস্ট্রেইন্ট চেক করে ডুপ্লিকেট প্রতিরোধ করে- ডাটাবেস ইনডেক্স অপটিমাইজেশনের জন্য তৈরি হয়
১.৩ সাবস্ক্রিপশন প্ল্যান তৈরি (SubscriptionPlan)
ধাপ ১: বেসিক প্ল্যান তৈরি
১. Admin Panel → Subscription Plan → Add New
২. তথ্য পূরণ করুন:
- Name: "বেসিক প্ল্যান"
- Plan Type: "basic"
- Description: "মাসিক ১০টি মডেল ব্যবহারের সুবিধা"
- Price: 1000.00 (টাকা)
- Duration Days: 30
- Model Limit: 10
- Features: ["Mass DM", "Photo Upload"] (JSON ফরম্যাটে)
- Is Active: True (চেক করুন)
৩. Save করুন
ধাপ ২: প্রিমিয়াম প্ল্যান তৈরি
১. আরেকটি প্ল্যান তৈরি করুন:
- Name: "প্রিমিয়াম প্ল্যান"
- Plan Type: "premium"
- Price: 2500.00
- Duration Days: 30
- Model Limit: 50
- Features: ["Mass DM", "Photo Upload", "Video Upload", "Auto Reply"]
২. ক্লায়েন্ট কাজের ধাপসমূহ
২.১ ইউজার রেজিস্ট্রেশন এবং ক্লায়েন্ট তৈরি
রেজিস্ট্রেশন প্রক্রিয়া:
# views.py তে রেজিস্ট্রেশন ভিউ
from django.contrib.auth.models import User, Group
from .models import Client
def register_user(request):
if request.method == 'POST':
# ১. User তৈরি করা
user = User.objects.create_user(
username=request.POST['username'],
email=request.POST['email'],
password=request.POST['password']
)
# ২. স্বয়ংক্রিয়ভাবে Client তৈরি
client = Client.objects.create(
user=user,
email=request.POST['email'],
company_name=request.POST.get('company_name', ''),
phone_number=request.POST.get('phone_number', ''),
timezone='Asia/Dhaka'
)
# ৩. ডিফল্ট গ্রুপে যোগ করা
basic_group, created = Group.objects.get_or_create(name='Basic Users')
user.groups.add(basic_group)
return redirect('login')
রেজিস্ট্রেশনের সময় যা ঘটে:
Userমডেলে নতুন ইউজার তৈরি হয়Clientমডেলে স্বয়ংক্রিয়ভাবে রেকর্ড তৈরি হয়created_atএবংupdated_atফিল্ড অটো-সেট হয়is_activeডিফল্টTrueসেট হয়- ইউজারকে ডিফল্ট গ্রুপে যোগ করা হয়
২.২ ক্লায়েন্ট লগইন
লগইন প্রক্রিয়া:
from django.contrib.auth import authenticate, login
def client_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user:
login(request, user)
# লগইন অ্যাক্টিভিটি রেকর্ড করা
ClientActivityLogs.objects.create(
client=user.client,
action='login',
description=f'User {username} logged in successfully'
)
return redirect('dashboard')
২.৩ সাবস্ক্রিপশন কেনা
সাবস্ক্রিপশন ক্রয় প্রক্রিয়া:
from datetime import date, timedelta
from .models import Subscription, SubscriptionPlan
def buy_subscription(request, plan_id):
plan = SubscriptionPlan.objects.get(id=plan_id)
client = request.user.client
# ১. পেমেন্ট প্রসেসিং (এখানে সিমুলেট করা হয়েছে)
payment_successful = process_payment(client, plan.price)
if payment_successful:
# ২. সাবস্ক্রিপশন তৈরি
end_date = date.today() + timedelta(days=plan.duration_days)
subscription = Subscription.objects.create(
client=client,
plan=plan,
end_date=end_date,
status='active',
amount_paid=plan.price,
payment_method='card'
)
# ৩. ইউজার গ্রুপ আপডেট
update_user_group_based_on_subscription(client.user, plan)
# ৪. অ্যাক্টিভিটি লগ
ClientActivityLogs.objects.create(
client=client,
action='subscription_purchased',
description=f'Purchased {plan.name} subscription'
)
return redirect('subscription_success')
গ্রুপ আপডেট ফাংশন:
def update_user_group_based_on_subscription(user, plan):
# পুরাতন গ্রুপ থেকে সরানো
user.groups.clear()
# নতুন গ্রুপে যোগ করা
if plan.plan_type == 'basic':
group_name = 'Basic Subscribers'
elif plan.plan_type == 'premium':
group_name = 'Premium Subscribers'
else:
group_name = 'Enterprise Subscribers'
group, created = Group.objects.get_or_create(name=group_name)
user.groups.add(group)
২.৪ মডেল তৈরি করা
মডেল প্রোফাইল তৈরির প্রক্রিয়া:
def create_model_profile(request):
if request.method == 'POST':
client = request.user.client
# ১. সাবস্ক্রিপশন চেক করা
if not client.can_use_models():
return JsonResponse({
'error': 'আপনার সাবস্ক্রিপশন মেয়াদ শেষ হয়ে গেছে'
})
# ২. মডেল লিমিট চেক করা
active_subscription = client.subscriptions.filter(status='active').first()
current_model_count = client.user.owned_models.filter(status='active').count()
if current_model_count >= active_subscription.plan.model_limit:
return JsonResponse({
'error': f'আপনি সর্বোচ্চ {active_subscription.plan.model_limit}টি মডেল ব্যবহার করতে পারবেন'
})
# ৩. মডেল তৈরি করা
model = ModelProfile.objects.create(
name=request.POST['name'],
platform=request.POST['platform'],
username=request.POST['username'],
profile_url=request.POST.get('profile_url', ''),
owner=request.user,
notes=request.POST.get('notes', '')
)
# ৪. অ্যাক্টিভিটি লগ
ClientActivityLogs.objects.create(
client=client,
action='model_created',
description=f'Created model profile: {model.name}'
)
return JsonResponse({'success': True, 'model_id': model.id})
২.৫ ফেজ তৈরি এবং কনফিগারেশন
ফেজ তৈরির প্রক্রিয়া:
def create_phase(request):
if request.method == 'POST':
client = request.user.client
# ১. অ্যাক্সেস চেক
if not client.can_use_models():
return JsonResponse({'error': 'সাবস্ক্রিপশন মেয়াদ শেষ'})
# ২. কনফিগ সিলেক্ট করা
config = GlobalConfig.objects.get(
id=request.POST['config_id'],
owner=request.user
)
# ৩. ফেজ তৈরি
phase = Phase.objects.create(
config=config,
client=client,
name=request.POST['name'],
schedule_type=request.POST['schedule_type'],
media=request.POST['media'],
priority=request.POST.get('priority', 'normal')
)
# ৪. মডেল যোগ করা
selected_models = request.POST.getlist('models')
for model_id in selected_models:
model = ModelProfile.objects.get(id=model_id, owner=request.user)
if model.can_be_used():
phase.models_list.add(model)
# ৫. ফাইল আপলোড হ্যান্ডলিং
if 'message_file' in request.FILES:
phase.message_file = request.FILES['message_file']
if 'cookie_file' in request.FILES:
phase.cookie_jsonfile = request.FILES['cookie_file']
phase.save()
return JsonResponse({'success': True, 'phase_id': phase.id})
৩. বট ওয়ার্কিং প্রসেস
৩.১ বট এক্সিকিউশন শুরু
এক্সিকিউশন শুরুর প্রক্রিয়া:
def start_bot_execution(phase_id):
phase = Phase.objects.get(id=phase_id)
# ১. প্রি-চেক
if not phase.can_run():
return {'error': 'ফেজ চালানো যাবে না - সাবস্ক্রিপশন সমস্যা'}
# ২. এক্সিকিউশন রেকর্ড তৈরি
execution = Execution.objects.create(
phase=phase,
phase_version=phase.version,
status='pending',
start_time=timezone.now()
)
# ৩. সাবস্ক্রিপশন চেক
if not execution.can_execute():
return {'error': 'এক্সিকিউশন বন্ধ - সাবস্ক্রিপশন মেয়াদ শেষ'}
# ৪. স্ট্যাটাস আপডেট
execution.status = 'running'
execution.save()
phase.is_running = True
phase.last_run = timezone.now()
phase.run_count += 1
phase.save()
# ৫. বট লজিক চালানো
try:
result = run_bot_logic(phase, execution)
# ৬. সফল সমাপ্তি
execution.status = 'completed'
execution.end_time = timezone.now()
execution.logs = result['logs']
execution.save()
# ৭. স্ট্যাটিস্টিক্স তৈরি
ExecutionStats.objects.create(
execution=execution,
total_models=result['total_models'],
success_count=result['success_count'],
failed_count=result['failed_count']
)
except Exception as e:
# ৮. এরর হ্যান্ডলিং
execution.status = 'failed'
execution.end_time = timezone.now()
execution.error_message = str(e)
execution.save()
# ৯. এরর রেকর্ড
PhaseErrorRecord.objects.create(
phase=phase,
execution=execution,
error_type=type(e).__name__,
message=str(e)
)
finally:
# ১০. ক্লিনআপ
phase.is_running = False
phase.save()
return {'success': True, 'execution_id': execution.id}
৩.২ এরর রেকর্ডিং সিস্টেম
এরর হ্যান্ডলিং প্রক্রিয়া:
def handle_bot_error(phase, execution, error):
# ১. এরর টাইপ নির্ধারণ
error_type = type(error).__name__
# ২. এরর রেকর্ড তৈরি
error_record = PhaseErrorRecord.objects.create(
phase=phase,
execution=execution,
error_type=error_type,
message=str(error)
)
# ৩. ক্রিটিক্যাল এরর চেক
critical_errors = ['AuthenticationError', 'SubscriptionExpiredError']
if error_type in critical_errors:
# ৪. ফেজ ডিসেবল করা
phase.enabled = False
phase.save()
# ৫. ক্লায়েন্ট নোটিফিকেশন
ClientActivityLogs.objects.create(
client=phase.client,
action='phase_disabled_due_to_error',
description=f'Phase {phase.name} disabled due to {error_type}'
)
return error_record
৩.৩ ফাইল চেঞ্জ ট্র্যাকিং
ফাইল পরিবর্তন ট্র্যাকিং প্রক্রিয়া:
# Phase মডেলের save() মেথডে অন্তর্ভুক্ত
def track_file_changes(self, previous_phase):
tracked_files = {
"message_file": self.message_file,
"used_file": self.used_file,
"folder_map": self.folder_map,
"cookie_jsonfile": self.cookie_jsonfile,
}
for field_name, new_file in tracked_files.items():
old_file = getattr(previous_phase, field_name)
if old_file != new_file and new_file:
# ফাইল চেঞ্জ লগ তৈরি
FileChangeLog.objects.create(
client=self.client,
phase=self,
file_type=field_name,
old_version=self.version,
new_version=self.version + 1,
description=f"{field_name} updated in phase '{self.name}'"
)
# ভার্সন আপডেট
self.version += 1
৪. সাবস্ক্রিপশন ম্যানেজমেন্ট
৪.১ স্বয়ংক্রিয় ডিসেবল সিস্টেম
সাবস্ক্রিপশন চেক প্রক্রিয়া:
# Client মডেলের can_use_models() মেথড
def can_use_models(self):
# ১. ক্লায়েন্ট অ্যাক্টিভ কিনা চেক
if not self.is_active:
return False
# ২. অ্যাক্টিভ সাবস্ক্রিপশন খোঁজা
active_subscription = self.subscriptions.filter(
status='active',
end_date__gte=timezone.now().date()
).first()
# ৩. সাবস্ক্রিপশন না থাকলে অটো-ডিসেবল
if not active_subscription:
self.auto_disable_access()
return False
return True
def auto_disable_access(self):
# ১. সব ফেজ ডিসেবল করা
disabled_phases = self.phases.filter(enabled=True).update(enabled=False)
# ২. চলমান এক্সিকিউশন বন্ধ করা
running_executions = Execution.objects.filter(
phase__client=self,
status='running'
).update(status='stopped')
# ৩. মডেল স্ট্যাটাস আপডেট
self.user.owned_models.filter(status='active').update(
status='payment_expired'
)
# ৪. লগ রেকর্ড
ClientActivityLogs.objects.create(
client=self,
action='auto_disabled',
description='Client access auto-disabled due to expired subscription'
)
৪.২ সাবস্ক্রিপশন রিনিউয়াল
রিনিউয়াল প্রক্রিয়া:
def renew_subscription(client, plan):
# ১. পুরাতন সাবস্ক্রিপশন খোঁজা
old_subscription = client.subscriptions.filter(status='active').first()
if old_subscription:
# ২. পুরাতন সাবস্ক্রিপশন বাতিল
old_subscription.status = 'cancelled'
old_subscription.cancelled_at = timezone.now()
old_subscription.save()
# ৩. নতুন সাবস্ক্রিপশন তৈরি
new_end_date = date.today() + timedelta(days=plan.duration_days)
new_subscription = Subscription.objects.create(
client=client,
plan=plan,
end_date=new_end_date,
status='active',
amount_paid=plan.price
)
# ৪. অ্যাক্সেস পুনরায় সক্রিয় করা
client.phases.filter(enabled=False).update(enabled=True)
client.user.owned_models.filter(status='payment_expired').update(
status='active'
)
# ৫. লগ রেকর্ড
ClientActivityLogs.objects.create(
client=client,
action='subscription_renewed',
description=f'Subscription renewed with {plan.name}'
)
return new_subscription
৫. রিফান্ড সিস্টেম
৫.১ রিফান্ড রিকোয়েস্ট
রিফান্ড আবেদন প্রক্রিয়া:
def request_refund(request, subscription_id):
subscription = Subscription.objects.get(
id=subscription_id,
client=request.user.client
)
# ১. রিফান্ড যোগ্যতা চেক
days_used = (date.today() - subscription.start_date).days
if days_used > 7: # ৭ দিনের মধ্যে রিফান্ড
return JsonResponse({'error': 'রিফান্ডের সময় শেষ'})
# ২. রিফান্ড রেকর্ড তৈরি
refund = Refund.objects.create(
subscription=subscription,
amount=subscription.amount_paid,
reason=request.POST['reason'],
status='pending'
)
# ৩. সাবস্ক্রিপশন সাসপেন্ড
subscription.status = 'suspended'
subscription.save()
# ৪. অ্যাক্সেস ডিসেবল
subscription.client.auto_disable_access()
# ৫. লগ রেকর্ড
ClientActivityLogs.objects.create(
client=subscription.client,
action='refund_requested',
description=f'Refund requested for subscription {subscription.id}'
)
return JsonResponse({'success': True, 'refund_id': refund.id})
৫.২ রিফান্ড প্রসেসিং (অ্যাডমিন)
অ্যাডমিন রিফান্ড অনুমোদন:
def process_refund(request, refund_id):
refund = Refund.objects.get(id=refund_id)
action = request.POST['action'] # 'approve' or 'reject'
if action == 'approve':
# ১. রিফান্ড অনুমোদন
refund.status = 'approved'
refund.processed_by = request.user
refund.processed_at = timezone.now()
refund.admin_notes = request.POST.get('admin_notes', '')
refund.save()
# ২. পেমেন্ট রিফান্ড (এখানে সিমুলেট)
process_payment_refund(refund.amount)
# ৩. সাবস্ক্রিপশন বাতিল
refund.subscription.status = 'cancelled'
refund.subscription.save()
else:
# ৪. রিফান্ড প্রত্যাখ্যান
refund.status = 'rejected'
refund.processed_by = request.user
refund.processed_at = timezone.now()
refund.admin_notes = request.POST.get('admin_notes', '')
refund.save()
# ৫. সাবস্ক্রিপশন পুনরায় সক্রিয়
refund.subscription.status = 'active'
refund.subscription.save()
return JsonResponse({'success': True})
৬. মনিটরিং এবং রিপোর্টিং
৬.১ ড্যাশবোর্ড ডেটা
ক্লায়েন্ট ড্যাশবোর্ড ডেটা:
def get_dashboard_data(client):
# ১. সাবস্ক্রিপশন তথ্য
active_subscription = client.subscriptions.filter(status='active').first()
# ২. মডেল স্ট্যাটিস্টিক্স
total_models = client.user.owned_models.count()
active_models = client.user.owned_models.filter(status='active').count()
# ৩. ফেজ স্ট্যাটিস্টিক্স
total_phases = client.phases.count()
active_phases = client.phases.filter(enabled=True).count()
# ৪. এক্সিকিউশন স্ট্যাটিস্টিক্স
total_executions = Execution.objects.filter(phase__client=client).count()
successful_executions = Execution.objects.filter(
phase__client=client,
status='completed'
).count()
# ৫. সাম্প্রতিক অ্যাক্টিভিটি
recent_activities = client.activity_logs.order_by('-timestamp')[:10]
return {
'subscription': active_subscription,
'models': {
'total': total_models,
'active': active_models,
'limit': active_subscription.plan.model_limit if active_subscription else 0
},
'phases': {
'total': total_phases,
'active': active_phases
},
'executions': {
'total': total_executions,
'successful': successful_executions,
'success_rate': (successful_executions/total_executions*100) if total_executions > 0 else 0
},
'recent_activities': recent_activities
}
৬.২ অ্যাডমিন রিপোর্ট
সিস্টেম রিপোর্ট জেনারেশন:
def generate_system_report():
# ১. সাবস্ক্রিপশন রিপোর্ট
total_subscriptions = Subscription.objects.count()
active_subscriptions = Subscription.objects.filter(status='active').count()
expired_subscriptions = Subscription.objects.filter(status='expired').count()
# ২. রেভিনিউ রিপোর্ট
total_revenue = Subscription.objects.aggregate(
total=models.Sum('amount_paid')
)['total'] or 0
# ৩. ইউজার অ্যাক্টিভিটি
total_users = Client.objects.count()
active_users = Client.objects.filter(is_active=True).count()
# ৪. বট পারফরমেন্স
total_executions = Execution.objects.count()
successful_executions = Execution.objects.filter(status='completed').count()
return {
'subscriptions': {
'total': total_subscriptions,
'active': active_subscriptions,
'expired': expired_subscriptions
},
'revenue': {
'total': total_revenue,
'monthly': calculate_monthly_revenue()
},
'users': {
'total': total_users,
'active': active_users
},
'performance': {
'total_executions': total_executions,
'success_rate': (successful_executions/total_executions*100) if total_executions > 0 else 0
}
}
৭. ট্রাবলশুটিং এবং সাধারণ সমস্যা
৭.১ সাধারণ সমস্যা এবং সমাধান
সমস্যা ১: সাবস্ক্রিপশন এক্সপায়ার হওয়ার পরও বট চলছে
সমাধান:
১. client.can_use_models() মেথড চেক করুন
২. Subscription.check_and_auto_disable() কল করুন
৩. ম্যানুয়ালি AutoDisableManager.check_all_subscriptions() রান করুন
সমস্যা ২: ফাইল আপলোডের পর ভার্সন আপডেট হচ্ছে না
সমাধান:
১. Phase.save() মেথডে file tracking লজিক চেক করুন
২. FileChangeLog রেকর্ড তৈরি হচ্ছে কিনা দেখুন
৩. version ফিল্ড ম্যানুয়ালি আপডেট করুন
সমস্যা ৩: এক্সিকিউশন স্ট্যাটাস আপডেট হচ্ছে না
সমাধান:
১. execution.save() কল করা হচ্ছে কিনা চেক করুন
২. start_time এবং end_time সেট করা হচ্ছে কিনা দেখুন
৩. duration_seconds অটো-ক্যালকুলেশন চেক করুন
৭.২ ডেটাবেস মেইনটেনেন্স
নিয়মিত মেইনটেনেন্স কাজ:
def daily_maintenance():
# ১. এক্সপায়ার্ড সাবস্ক্রিপশন চেক
expired_count = AutoDisableManager.check_all_subscriptions()
# ২. পুরাতন লগ ক্লিনআপ (৩০ দিনের বেশি পুরাতন)
old_logs = ClientActivityLogs.objects.filter(
timestamp__lt=timezone.now() - timedelta(days=30)
)
old_logs.delete()
# ৩. অসম্পূর্ণ এক্সিকিউশন ক্লিনআপ
stuck_executions = Execution.objects.filter(
status='running',
start_time__lt=timezone.now() - timedelta(hours=2)
)
stuck_executions.update(status='failed', error_message='Execution timeout')
return {
'expired_subscriptions': expired_count,
'cleaned_logs': old_logs.count(),
'stuck_executions': stuck_executions.count()
}
৮. সিকিউরিটি এবং বেস্ট প্র্যাকটিস
৮.১ সিকিউরিটি ব্যবস্থা
ডেটা প্রোটেকশন:
# ভিউতে পারমিশন চেক
from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
@login_required
def phase_detail(request, phase_id):
phase = Phase.objects.get(id=phase_id)
# ওনারশিপ চেক
if phase.client.user != request.user:
raise PermissionDenied("আপনার এই ফেজে অ্যাক্সেস নেই")
# সাবস্ক্রিপশন চেক
if not phase.client.can_use_models():
return redirect('subscription_expired')
return render(request, 'phase_detail.html', {'phase': phase})
৮.২ পারফরমেন্স অপটিমাইজেশন
ডেটাবেস কোয়েরি অপটিমাইজেশন:
# Efficient queries with select_related and prefetch_related
def get_client_phases(client):
return Phase.objects.filter(client=client)\
.select_related('config', 'client')\
.prefetch_related('models_list')\
.order_by('-created_at')
# Bulk operations for better performance
def bulk_disable_expired_models():
expired_clients = Client.objects.filter(
subscriptions__status='expired'
).distinct()
ModelProfile.objects.filter(
owner__in=[c.user for c in expired_clients],
status='active'
).update(status='payment_expired')
সারসংক্ষেপ
এই বট ম্যানেজমেন্ট সিস্টেম একটি সম্পূর্ণ সাবস্ক্রিপশন-ভিত্তিক প্ল্যাটফর্ম যা:
✅ অ্যাডমিন ফিচার: বট কনফিগারেশন এবং সাবস্ক্রিপশন প্ল্যান ম্যানেজমেন্ট
✅ ক্লায়েন্ট ফিচার: রেজিস্ট্রেশন, সাবস্ক্রিপশন, মডেল এবং ফেজ ম্যানেজমেন্ট
✅ অটোমেশন: স্বয়ংক্রিয় সাবস্ক্রিপশন চেক এবং অ্যাক্সেস কন্ট্রোল
✅ মনিটরিং: সম্পূর্ণ লগিং এবং এরর ট্র্যাকিং সিস্টেম
✅ সিকিউরিটি: রোল-বেসড অ্যাক্সেস কন্ট্রোল এবং ডেটা প্রোটেকশন
সিস্টেমটি সম্পূর্ণভাবে স্বয়ংক্রিয় এবং কোনো ম্যানুয়াল ইন্টারভেনশন ছাড়াই সাবস্ক্রিপশন ম্যানেজমেন্ট এবং অ্যাক্সেস কন্ট্রোল পরিচালনা করে।