سبد خرید
0

سبد خرید شما خالی است.

ارسال پیام به اعضای گروه تلگرام با استفاده از Telethon

ارسال پیام به اعضای تلگرام

در این آموزش ، ما قصد داریم از فایل CSV که در آموزش استخراج کامل اعضای گروه تلگرام ایجاد کرده ایم استفاده کنیم تا با استفاده از Telegram API و کتابخانه Python Telethon پیام های انبوه را برای اعضای گروه تلگرامی استخراج شده خود ارسال کنیم. بنابراین اگر قبلاً این مورد را بررسی نکرده اید ، به این آموزش مراجعه کرده و با نحوه دریافت این فایل آشنا شوید. در واقع ما اسکریپت پایتون جدید خود را با آن فایل CSV تغذیه می کنیم تا نام های کاربری یا شناسه های کاربر را از آن بخوانیم و برای آنها پیام ارسال کنیم.

کلید API تلگرام را دریافت کنید

همانطور که در آموزش قبلی بیان شد شما باید اطلاعات API تلگرام خود را دریافت کنید تا بتوانید از API استفاده کنید. بنابراین  آموزش قبلی را بررسی کنید و از راهنما برای دریافت اعتبارنامه API تلگرام خود استفاده کنید یا به سادگی این مراحل را دنبال کنید:

• با استفاده از هر برنامه ای در تلگرام ثبت نام کنید.
• وارد سایت تلگرام خود شوید: https://my.telegram.org.
• به «ابزارهای توسعه API» بروید و فرم را پر کنید.
• آدرس های اولیه و همچنین پارامترهای api_id و api_hash مورد نیاز برای مجوز کاربر را دریافت خواهید کرد.

کتابخانه Telethon را نصب کنید

همچنین شما باید Telethon را با استفاده از pip نصب کنید.

python -m pip install telethon

توجه: اگر از Linux یا Mac استفاده می کنید ، برای جلوگیری از مشکلات مجوز لازم است قبل از pip از sudo استفاده کنید.

Client Object ایجاد کرده و وارد شوید

هر زمان که می خواهید از Telethon استفاده کنید ، مرحله اول ورود به API است. بنابراین شما باید یک شی client  ایجاد کنید و بررسی کنید که آیا از قبل مجاز است در غیر اینصورت رمزعبور OTP را بخواهید.

بنابراین ابتدا  client object  خود را ایجاد کنید.

from telethon.sync import TelegramClient
api_id = 123456
api_hash = 'YOUR_API_HASH'
phone = 'شماره موبایل'
client = TelegramClient(phone, api_id, api_hash)

متصل شوید و بررسی کنید که آیا client  مجاز است. در غیر اینصورت از کاربر بخواهید کدی را که از تلگرام دریافت کرده وارد کند.

client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone)
    client.sign_in(phone, input('Enter the code: '))

اعضا را از CSV File بخوانید
ما در حال انتقال نام فایل در پارامترهای sys.argv هستیم. sys.argv لیستی در پایتون است که شامل آرگومان های خط فرمان منتقل شده به اسکریپت است.

بنابراین اگر python sendMessage.py users.csv را در خط فرمان sys.argv اجرا کنید لیستی مانند این را باز می گرداند:

['sendMessage.py', 'users.csv']

همانطور که مشاهده می کنید ، اولین مورد در لیست نام اسکریپت و مورد دوم نام فایل CSV ما است. بنابراین می توانیم با sys.argv به نام پرونده دسترسی پیدا کنیم [1].

اکنون نام (یا مسیر) پرونده CSV ما را دارید و می توانید از ماژول csv Python برای خواندن فایل و ایجاد لیستی از کاربران استفاده کنید.

 

ماژول های مورد نیاز را وارد کنید

import sys
import csv

برای هر کاربر یک dictionary درست کنید و آن را به لیست کاربران ما اضافه کنید.

input_file = sys.argv[1]
users = []
with open(input_file, encoding='UTF-8') as f:
    rows = csv.reader(f,delimiter=",",lineterminator="\n")
    next(rows, None)
    for row in rows:
        user = {}
        user['username'] = row[0]
        user['id'] = int(row[1])
        user['access_hash'] = int(row[2])
        user['name'] = row[3]
        users.append(user)

توجه: شما باید شناسه کاربر را وارد کنید و به نوع صحیح دسترسی به هش دسترسی داشته باشید.

توجه: از ردیف اول در پرونده CSV (هدر) با استفاده از عملکرد بعدی عبور می کنیم.

 

اعلان ارسال با شناسه کاربری یا نام کاربری

همانطور که در آموزش قبلی اشاره کردم ، همه اعضای تلگرام نام کاربری ندارند. همچنین ، دسترسی هش برای هر کاربر برای هر حساب تلگرام متفاوت است. این بدان معنی است که اگر کاربران را با یک حساب Telegram استخراج کنید و می خواهید با یک حساب دیگر پیام ارسال کنید ، نمی توانید از آن هش های دسترسی برای بدست آوردن کاربران استفاده کنید. اما می توانید از نام های کاربری استفاده کنید. برای حل این مشکل و جلوگیری از خطا ، از کاربر اسکریپت پایتون شما سوال خواهیم کرد که آیا می خواهد از نام کاربری تلگرام یا شناسه کاربری برای ارسال پیام استفاده کند؟.

mode = int (ورودی ("برای ارسال با شناسه کاربری 1 یا برای ارسال با نام کاربری 2 وارد کنید:"))

ارسال پیام

اکنون ، برای شروع ارسال پیام ، تمام شرایط لازم را دارید.

لیستی از پیام ها را ایجاد کرده و به طور تصادفی یکی از آنها را برای ارسال به کاربر انتخاب کنید. همچنین ، پیام را قالب بندی کنید تا نام کاربر را در آن وارد کنید.

messages = ["Hello {}, How are you?", "Hi {}, What's up?", "Hey {}, do you want to gotrained?"]

اکنون ، هر کاربری را مرور کرده و پیامی ارسال کنید. در نظر داشته باشید که اگر خیلی سریع پیام ارسال کنید ، از Telegram یک PeerFloodError دریافت خواهید کرد. بنابراین ما با استفاده از try این خطا را کنترل خواهیم کرد ، بجز block و در صورت بروز آن از برنامه خارج می شویم. در غیر این صورت ممکن است این حساب به دلیل هرزنامه در تلگرام ممنوع شود. همچنین ، برای جلوگیری از خطای سیل ، بین هر پیام زمان sleep اضافه کنید.

ما قصد داریم آن را مرحله به مرحله انجام دهیم.

به هر کاربر مراجعه کرده و بسته به “حالت” وارد شده قبل ، گیرنده را دریافت کنید.

from telethon.tl.types import InputPeerUser
for user in users:
    if mode == 2:
        if user['username'] == "":
            continue
        receiver = client.get_input_entity(user['username'])
    elif mode == 1:
        receiver = InputPeerUser(user['id'],user['access_hash'])
    else:
        print("Invalid Mode. Exiting.")
        sys.exit()

یک پیام را به طور تصادفی از لیست پیام انتخاب میکند.

import random
message = random.choice(messages)

پیام را با نام کاربر قالب بندی کرده و ارسال کنید.

client.send_message(receiver, message.format(user['name'])

کد کامل برای ارسال پیام ها از جمله مدیریت استثناها به شرح زیر است:

from telethon.tl.types import InputPeerUser
from telethon.errors.rpcerrorlist import PeerFloodError
import random
SLEEP_TIME = 30
for user in users:
    if mode == 2:
        if user['username'] == "":
            continue
        receiver = client.get_input_entity(user['username'])
    elif mode == 1:
        receiver = InputPeerUser(user['id'],user['access_hash'])
    else:
        print("Invalid Mode. Exiting.")
        client.disconnect()
        sys.exit()
    message = random.choice(messages)
    try:
        print("Sending Message to:", user['name'])
        client.send_message(receiver, message.format(user['name']))
        print("Waiting {} seconds".format(SLEEP_TIME))
        time.sleep(SLEEP_TIME)
    except PeerFloodError:
        print("Getting Flood Error from telegram. Script is stopping now. Please try again after some time.")
        client.disconnect()
        sys.exit()
    except Exception as e:
        print("Error:", e)
        print("Trying to continue...")
        continue

در اینجا کد تکمیل شده برای این آموزش آورده شده است.

from telethon.sync import TelegramClient
from telethon.tl.types import InputPeerUser
from telethon.errors.rpcerrorlist import PeerFloodError
import sys
import csv
import random
import time
api_id = 123456
api_hash = 'YOUR_API_HASH'
phone = '+111111111111'

SLEEP_TIME = 30
client = TelegramClient(phone, api_id, api_hash)

client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone)
    client.sign_in(phone, input('Enter the code: '))

input_file = sys.argv[1]
users = []
with open(input_file, encoding='UTF-8') as f:
    rows = csv.reader(f,delimiter=",",lineterminator="\n")
    next(rows, None)
    for row in rows:
        user = {}
        user['username'] = row[0]
        user['id'] = int(row[1])
        user['access_hash'] = int(row[2])
        user['name'] = row[3]
        users.append(user)

mode = int(input("Enter 1 to send by user ID or 2 to send by username: "))

messages= ["Hello {}, How are you?", "Hi {}, What's up?", "Hey {}, do you want to gotrained?"]

for user in users:
    if mode == 2:
        if user['username'] == "":
            continue
        receiver = client.get_input_entity(user['username'])
    elif mode == 1:
        receiver = InputPeerUser(user['id'],user['access_hash'])
    else:
        print("Invalid Mode. Exiting.")
        client.disconnect()
        sys.exit()
    message = random.choice(messages)
    try:
        print("Sending Message to:", user['name'])
        client.send_message(receiver, message.format(user['name']))
        print("Waiting {} seconds".format(SLEEP_TIME))
        time.sleep(SLEEP_TIME)
    except PeerFloodError:
        print("Getting Flood Error from telegram. Script is stopping now. Please try again after some time.")
        client.disconnect()
        sys.exit()
    except Exception as e:
        print("Error:", e)
        print("Trying to continue...")
        continue
client.disconnect()
print("Done. Message sent to all users.")

 

 

کلیدواژه : تلگرام مارکتینگ
آواتار
33

برنامه نویس وب و محقق سئو و بهینه ساری وبسایت

دیدگاه کاربران
  • ممدم :) 29 تیر 1400 / 16:53

    ولی توی تلتون نیز نیست فک کنم برای لاگین بات cli فون بزنی و توی ساخت سشن خودش اونجا میپرسه و تاییدیه میفرسته
    به هرحال
    با پایروگرام خیلی اسونتر میشد انجام داد ولی بازم دمتگرم
    و اینکه من با پایرو بات نوشتم ولی یه مشکلی دارم
    ما دستورات رو تعریف میکنیم و میگیم طبق اونا کار کنه
    ولی من میخوام به پیام های بات نظم بدم یعنی چی؟
    یعنی کاربر استارت کنه بعدش بین 2 چیز یه چیزیو انتخاب کنه و باز توی همون چیز 2 تا چیز انتخاب کنه و همین طور دسته بندی و مرتب باشه پیاما یعنی اگه توی بخش اول زد گل بره تو کتگوری گل و اینا نره توی اون یکی کتگوری
    با ریپلای کیبورد نمیخوام انجام بدم
    میشه کمکم کنی؟ به همین ایمیلم خواهشا اگه میدونی جوابمو بفرست مرسی XD
    ایدی تل ام ==> IM_v1z1t0r
    همیچین چیزی 🙂

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *