-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot.py
More file actions
270 lines (217 loc) · 9.95 KB
/
bot.py
File metadata and controls
270 lines (217 loc) · 9.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
import telebot
import logging
import json
import os
from datetime import datetime
from typing import Dict, List, Optional
'''
════════════════════════════════════════════════════════════
🚀 ربات مدیریت عضویت خودکار کانالهای تلگرام
════════════════════════════════════════════════════════════
📌 اطلاعات طراح و توسعهدهنده:
👤 Developer: @theesmaeil1
🌐 Website: viraigame.ir
📱 Instagram: @theesmaeil1
💬 Telegram: @theesmaeil1
🏢 مجموعه: viraigame.ir
📦 دستور نصب کتابخانهها:
pip install pyTelegramBotAPI
════════════════════════════════════════════════════════════
In the name of God
════════════════════════════════════════════════════════════
'''
# تنظیمات لاگ
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO,
handlers=[
logging.FileHandler('bot.log', encoding='utf-8'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# تنظیمات ربات
BOT_TOKEN = '' # Bot Token را اینجا وارد کنید
ADMIN_IDS = [] # شناسههای ادمین (اختیاری)
WELCOME_MESSAGE = """✅ درخواست عضویت شما در کانال تایید شد!
👋 به خانواده ما خوش آمدید!
📌 برای ارتباط با ما:
🌐 وبسایت: viraigame.ir
💬 پشتیبانی: @theesmaeil1"""
# فایل ذخیره آمار
STATS_FILE = 'stats.json'
# مقداردهی اولیه آمار
def load_stats():
"""بارگذاری آمار از فایل"""
if os.path.exists(STATS_FILE):
try:
with open(STATS_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except:
pass
return {
'total_approved': 0,
'total_rejected': 0,
'channels': {},
'daily_stats': {}
}
def save_stats(stats):
"""ذخیره آمار در فایل"""
try:
with open(STATS_FILE, 'w', encoding='utf-8') as f:
json.dump(stats, f, ensure_ascii=False, indent=2)
except Exception as e:
logger.error(f"خطا در ذخیره آمار: {e}")
# بارگذاری آمار
stats = load_stats()
# ایجاد ربات
bot = telebot.TeleBot(token=BOT_TOKEN)
def is_admin(user_id: int) -> bool:
"""بررسی ادمین بودن کاربر"""
return user_id in ADMIN_IDS if ADMIN_IDS else False
def update_stats(channel_id: int, channel_title: str, action: str = 'approved'):
"""بهروزرسانی آمار"""
global stats
today = datetime.now().strftime('%Y-%m-%d')
# آمار کلی
if action == 'approved':
stats['total_approved'] = stats.get('total_approved', 0) + 1
else:
stats['total_rejected'] = stats.get('total_rejected', 0) + 1
# آمار کانال
channel_key = str(channel_id)
if channel_key not in stats['channels']:
stats['channels'][channel_key] = {
'title': channel_title,
'approved': 0,
'rejected': 0
}
stats['channels'][channel_key][action] = stats['channels'][channel_key].get(action, 0) + 1
# آمار روزانه
if today not in stats['daily_stats']:
stats['daily_stats'][today] = {'approved': 0, 'rejected': 0}
stats['daily_stats'][today][action] = stats['daily_stats'][today].get(action, 0) + 1
save_stats(stats)
@bot.message_handler(commands=['start'])
def send_welcome(message):
"""پیام خوشآمدگویی"""
welcome_text = f"""🤖 ربات مدیریت عضویت خودکار
👤 Developer: @theesmaeil1
🌐 Website: viraigame.ir
📱 Instagram: @theesmaeil1
💬 Telegram: @theesmaeil1
🏢 مجموعه: viraigame.ir
⚙️ این ربات به صورت خودکار درخواستهای عضویت در کانالها را تایید میکند.
📊 برای مشاهده آمار از دستور /stats استفاده کنید.
ℹ️ برای راهنما از دستور /help استفاده کنید."""
bot.reply_to(message, welcome_text)
logger.info(f"کاربر {message.from_user.id} دستور /start را اجرا کرد")
@bot.message_handler(commands=['help'])
def send_help(message):
"""راهنمای استفاده"""
help_text = """📖 راهنمای استفاده:
🔹 /start - شروع ربات
🔹 /stats - مشاهده آمار
🔹 /help - نمایش این راهنما
⚙️ نحوه استفاده:
1️⃣ ربات را به عنوان ادمین به کانال اضافه کنید
2️⃣ به ربات دسترسی تایید درخواستهای عضویت بدهید
3️⃣ ربات به صورت خودکار درخواستها را تایید میکند
📌 نکته: ربات باید دسترسی مدیریت اعضا را داشته باشد."""
bot.reply_to(message, help_text)
logger.info(f"کاربر {message.from_user.id} دستور /help را اجرا کرد")
@bot.message_handler(commands=['stats'])
def send_stats(message):
"""نمایش آمار"""
if not is_admin(message.from_user.id) and ADMIN_IDS:
bot.reply_to(message, "❌ شما دسترسی به این بخش را ندارید.")
return
total_approved = stats.get('total_approved', 0)
total_rejected = stats.get('total_rejected', 0)
total = total_approved + total_rejected
stats_text = f"""📊 آمار ربات:
✅ تایید شده: {total_approved}
❌ رد شده: {total_rejected}
📈 مجموع: {total}
📌 کانالها: {len(stats.get('channels', {}))}"""
# آمار امروز
today = datetime.now().strftime('%Y-%m-%d')
today_stats = stats.get('daily_stats', {}).get(today, {})
if today_stats:
stats_text += f"\n\n📅 امروز ({today}):"
stats_text += f"\n✅ تایید: {today_stats.get('approved', 0)}"
stats_text += f"\n❌ رد: {today_stats.get('rejected', 0)}"
bot.reply_to(message, stats_text)
logger.info(f"کاربر {message.from_user.id} آمار را مشاهده کرد")
@bot.chat_join_request_handler(func=lambda ac: True)
def handle_join_request(ac):
"""مدیریت درخواستهای عضویت"""
try:
user_id = ac.from_user.id
chat_id = ac.chat.id
# دریافت اطلاعات کانال
try:
chat_info = bot.get_chat(chat_id)
channel_title = chat_info.title
except:
channel_title = "نامشخص"
# تایید درخواست
try:
bot.approve_chat_join_request(chat_id, user_id)
# ارسال پیام خوشآمدگویی
try:
bot.send_message(
user_id,
WELCOME_MESSAGE,
parse_mode='HTML'
)
except Exception as e:
logger.warning(f"نمیتوان پیام خوشآمدگویی را ارسال کرد: {e}")
# بهروزرسانی آمار
update_stats(chat_id, channel_title, 'approved')
logger.info(f"درخواست عضویت {user_id} در کانال {channel_title} ({chat_id}) تایید شد")
except Exception as e:
logger.error(f"خطا در تایید درخواست عضویت: {e}")
# در صورت خطا، رد کردن درخواست
try:
bot.decline_chat_join_request(chat_id, user_id)
update_stats(chat_id, channel_title, 'rejected')
logger.info(f"درخواست عضویت {user_id} رد شد به دلیل خطا")
except:
pass
except Exception as e:
logger.error(f"خطای کلی در مدیریت درخواست عضویت: {e}")
@bot.message_handler(func=lambda message: True)
def handle_all_messages(message):
"""مدیریت پیامهای دیگر"""
if message.chat.type == 'private':
bot.reply_to(
message,
"ℹ️ این ربات فقط برای تایید خودکار درخواستهای عضویت در کانالها طراحی شده است.\n\nبرای راهنما از دستور /help استفاده کنید."
)
def main():
"""تابع اصلی اجرای ربات"""
try:
logger.info("=" * 50)
logger.info("🚀 ربات در حال راهاندازی...")
logger.info(f"👤 Developer: @theesmaeil1")
logger.info(f"🌐 Website: viraigame.ir")
logger.info(f"📱 Instagram: @theesmaeil1")
logger.info(f"💬 Telegram: @theesmaeil1")
logger.info("=" * 50)
# بررسی اتصال
bot_info = bot.get_me()
logger.info(f"✅ ربات با موفقیت متصل شد: @{bot_info.username}")
logger.info(f"📊 آمار فعلی: {stats.get('total_approved', 0)} تایید شده")
print("\n" + "=" * 50)
print("🤖 ربات در حال اجرا است...")
print(f"👤 Developer: @theesmaeil1")
print(f"🌐 Website: viraigame.ir")
print("=" * 50 + "\n")
# شروع پولینگ
bot.infinity_polling(timeout=10, long_polling_timeout=5)
except Exception as e:
logger.error(f"خطای بحرانی در اجرای ربات: {e}")
raise
if __name__ == '__main__':
main()