In the previous Telethon tutorial you learned how to send messages to Telegram group members. Now you are going to learn how to add new members to your own group. We will read the member list from the csv file which we extracted in the previous tutorial and add them to our group.
Make sure to check our previous Telethon tutorials to understand the basics of using Telethon and Telegram API.
- Scraping Telegram Group Members with Python and Telethon
- Sending Message to Telegram Group Members Using Telethon
The first steps are going to be very similar to the previous tutorials. Basically you need to get API keys from telegram and install Telethon using pip.
So let’s get started.
Disclaimer: Telegram does not allow adding more than 200 members to a group or channel by one account. Using this script, I am able to add around 150-200 members with 60 second sleep between each add; after that, you have to change to another Telegram account/number.
Get Telegram API Key
As stated in the previous tutorial you need to get your Telegram API credentials to be able to use the API. So do not hesitate and check the previous tutorial and use the guide to get your own Telegram API credentials, or simply follow these steps:
• Sign up for Telegram using any application.
• Log in to your Telegram core: https://my.telegram.org.
• Go to ‘API development tools’ and fill out the form.
• You will get basic addresses as well as the api_id and api_hash parameters required for user authorization.
Install Telethon
Also you need to install Telethon using pip.
1 2 |
python -m pip install telethon |
Note: If you are on Linux or Mac, you might need to use sudo before pip to avoid permissions issues.
Create Client Object and Login
As usual we have to create a Telegram client object and check if it is already authorized otherwise ask for an OTP password.
Create a client object.
1 2 3 4 5 6 |
from telethon.sync import TelegramClient api_id = 123456 api_hash = 'YOUR_API_HASH' phone = '+111111111111' client = TelegramClient(phone, api_id, api_hash) |
Note: For the sake of simplicity we are importing TelegramClient from telethon.sync module.
Next, you have to connect the client and check if it is already authorized, otherwise Telegram will send an OTP password to the client and we will ask the user to enter the code which they received.
1 2 3 4 5 |
client.connect() if not client.is_user_authorized(): client.send_code_request(phone) client.sign_in(phone, input('Enter the code: ')) |
Read Members from CSV File
We are passing the file name in the sys.argv parameters. sys.argv is a list in Python, which contains the command-line arguments passed to the script.
So if you run python sendMessage.py users.csv in the command line sys.argv will return a list like this:
1 2 |
['sendMessage.py', 'users.csv'] |
As you can see, the first item in the list is the name of the script and the second item is the name of our CSV file. So we can access the file name with sys.argv[1] .
Now you have the name (or path) of our CSV file and you can use Python’s csv module to read the file and create a list of users.
Import the required modules
1 2 3 |
import sys import csv |
Create a dictionary for every user and append that to our user list.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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) |
Note: You need to cast the user id and access hash to integer type.
Note: We skip the first row in the CSV file (header) using the next function.
Choose a Group to Add Members
In this step, you are going to ask the user to select a group which they want to add the members to it.
First get all groups using GetDialogsRequest .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty chats = [] last_date = None chunk_size = 200 groups=[] result = client(GetDialogsRequest( offset_date=last_date, offset_id=0, offset_peer=InputPeerEmpty(), limit=chunk_size, hash = 0 )) chats.extend(result.chats) |
Add only super groups to groups list.
1 2 3 4 5 6 7 |
for chat in chats: try: if chat.megagroup == True: groups.append(chat) except: continue |
Now print all of the groups on screen with their indexes and ask the user to enter the group index they want.
1 2 3 4 5 6 |
print('Choose a group to add members:') i=0 for group in groups: print(str(i) + '- ' + group.title) i+=1 |
Ask for input and get the group using entered index.
1 2 3 |
g_index = input("Enter a Number: ") target_group=groups[int(g_index)] |
Get the group entity.
1 2 3 |
from telethon.tl.types import InputPeerChannel target_group_entity = InputPeerChannel(target_group.id,target_group.access_hash) |
Ask User to Enter the Adding Mode
For adding the user we need to get the user entity first. There is two options to do this.
First let’s ask the user which mode they want and then we will explain them one by one.
1 2 |
mode = int(input("Enter 1 to add by username or 2 to add by ID: ")) |
1- By username
Basically you can get any entity in Telethon including users, channels or groups using its username. But as I mentioned before not every user has a username. So if this mode is selected by user we will skip the users which don’t have a user name while adding. Here is how you can get the user entity by its username.
1 2 |
user_to_add = client.get_input_entity(user['username']) |
2- By Id and access hash
Every entity in Telegram has an ID and an access hash. The ID is unique but the access hash is different for every telegram account. It means if you scrape the users with an account and you want to add them using another account then you can’t use this mode.
1 2 3 |
from telethon.tl.types InputPeerUser user_to_add = InputPeerUser(user['id'], user['access_hash']) |
Add Members to the Selected Group
Now you have the users in users list and the selected group in target_group . We will use InviteToChannelRequest function to the add a user to the group. So let’s import it first.
1 2 |
from telethon.tl.functions.channels import InviteToChannelRequest |
Then you need to get the user based on the entered mode (i.e by ID or by user name.
1 2 3 4 5 6 7 |
if mode == 1: user_to_add = InputPeerUser(user['id'], user['access_hash']) elif mode == 2: user_to_add = client.get_input_entity(user['username']) else: sys.exit("Invalid Mode Selected. Please Try Again.") |
Handle Exceptions
Now you can start adding the users but you have to consider some error scenarios.
1- PeerFloodError
If you put too much requests on Telegram API or commit tasks very fast, you will get PeerFloodError . So you need to put a waiting time between each add to prevent this error. We will use 60 seconds in this tutorial to stay safe. But you can play with this number and find the optimum value.
You can also use the random library’s randrange() method giving a random sleep time, say between 60 and 180 seconds. For the sake for clarification, the code below users “print”, but you can of course delete it.
1 2 3 4 5 6 7 |
import random from time import sleep for x in range(5): sleep(random.randrange(60, 180)) print("Sleep") |
2- UserPrivacyRestrictedError
You might get this error for some users depending on their privacy settings.
Finally, let’s add our new members.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
for user in users: try: print ("Adding {}".format(user['id'])) if mode == 1: if user['username'] == "": continue user_to_add = client.get_input_entity(user['username']) elif mode == 2: user_to_add = InputPeerUser(user['id'], user['access_hash']) else: sys.exit("Invalid Mode Selected. Please Try Again.") client(InviteToChannelRequest(target_group_entity,[user_to_add])) print("Waiting 60 Seconds...") time.sleep(60) except PeerFloodError: print("Getting Flood Error from telegram. Script is stopping now. Please try again after some time.") except UserPrivacyRestrictedError: print("The user's privacy settings do not allow you to do this. Skipping.") except: traceback.print_exc() print("Unexpected Error") continue |
3. FloodWaitError
If you get this error, you should either wait for the stated time or use another Telegram number.
telethon.errors.rpcerrorlist.FloodWaitError: A wait of 58593 seconds is required
(caused by SendCodeRequest)
So you must avoid this error in the first place. To do so, it is recommended to give an extra sleep time (15 minutes or more) after adding every 50 users. If this will take much time, you can use a cloud server to run your code.
To get a general idea about how this works, run this simple code. Here, you have a list of names; the code loops over names, sleep for 5 seconds after each 10 names, and print the name.
1 2 3 4 5 6 7 8 9 10 11 12 |
from time import sleep lst = ["Kathrine Geier", "Shayne Seiter", "Annabel Fogal", "Janean Burkhart", "Myrta Matthew", "Dori Sharpe", "Lupe Fiscus", "Juanita Mankin", "Kathlene Tullis", "Zofia Aungst", "Yoshie Destefano", "Janette Rainey", "Robin Kimbrell", "Shenna Topps", "Tamera Asmussen", "Bette Sorrentino", "Leslee Deets", "Kayla Falconer", "Priscila Pardee", "Emily Brice", "Lasonya Ehrhart", "Shanna Caudillo", "Gidget Rush", "Tempie Angevine", "Eveline Texada", "Tameka Regal", "Jerrell Valois", "Leonora Rudder", "Chau Garrison", "Venus Leeper", "Oretha Sontag", "Dorene Brownson", "Emmaline Bingman", "Karolyn Rager", "Marin Mcfadden", "Hortencia Reza", "Tamara Thackston", "Emmie Mullins", "Kristina Barham", "Lionel Warfel", "Kelli Jepson", "Jonie Galvan", "Emil Schindler", "Tari Scull", "Maritza Wiersma", "Jovita Goodlett", "Alphonso Hartsoe", "Morris Beitz", "Olin Brunke", "Wan Ferrer"] n = 0 for l in lst: n = n + 1 if n % 10 == 0: sleep(5) print(n, l) |
As I mentioned earlier, Telegram does not allow adding more than 200 members to a group or channel by one account. Using this script, I am able to add around 150-200 members with 60 second sleep between each add; after that, you have to change to another Telegram account/number.
Project Source Code for Adding Members to Telegram Groups Tutorial
Here is the completed code for this tutorial.
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 |
from telethon.sync import TelegramClient from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty, InputPeerChannel, InputPeerUser from telethon.errors.rpcerrorlist import PeerFloodError, UserPrivacyRestrictedError from telethon.tl.functions.channels import InviteToChannelRequest import sys import csv import traceback import time api_id = 123456 api_hash = 'YOUR_API_HASH' phone = '+111111111111' 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) chats = [] last_date = None chunk_size = 200 groups=[] result = client(GetDialogsRequest( offset_date=last_date, offset_id=0, offset_peer=InputPeerEmpty(), limit=chunk_size, hash = 0 )) chats.extend(result.chats) for chat in chats: try: if chat.megagroup== True: groups.append(chat) except: continue print('Choose a group to add members:') i=0 for group in groups: print(str(i) + '- ' + group.title) i+=1 g_index = input("Enter a Number: ") target_group=groups[int(g_index)] target_group_entity = InputPeerChannel(target_group.id,target_group.access_hash) mode = int(input("Enter 1 to add by username or 2 to add by ID: ")) for user in users: try: print ("Adding {}".format(user['id'])) if mode == 1: if user['username'] == "": continue user_to_add = client.get_input_entity(user['username']) elif mode == 2: user_to_add = InputPeerUser(user['id'], user['access_hash']) else: sys.exit("Invalid Mode Selected. Please Try Again.") client(InviteToChannelRequest(target_group_entity,[user_to_add])) print("Waiting 60 Seconds...") time.sleep(60) except PeerFloodError: print("Getting Flood Error from telegram. Script is stopping now. Please try again after some time.") except UserPrivacyRestrictedError: print("The user's privacy settings do not allow you to do this. Skipping.") except: traceback.print_exc() print("Unexpected Error") continue |
Full Code with random and extra sleep after 50 users
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 |
from telethon.sync import TelegramClient from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty, InputPeerChannel, InputPeerUser from telethon.errors.rpcerrorlist import PeerFloodError, UserPrivacyRestrictedError from telethon.tl.functions.channels import InviteToChannelRequest import sys import csv import traceback import time import random api_id = 123456 api_hash = 'YOUR_API_HASH' phone = '+111111111111' 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) chats = [] last_date = None chunk_size = 200 groups=[] result = client(GetDialogsRequest( offset_date=last_date, offset_id=0, offset_peer=InputPeerEmpty(), limit=chunk_size, hash = 0 )) chats.extend(result.chats) for chat in chats: try: if chat.megagroup== True: groups.append(chat) except: continue print('Choose a group to add members:') i=0 for group in groups: print(str(i) + '- ' + group.title) i+=1 g_index = input("Enter a Number: ") target_group=groups[int(g_index)] target_group_entity = InputPeerChannel(target_group.id,target_group.access_hash) mode = int(input("Enter 1 to add by username or 2 to add by ID: ")) n = 0 for user in users: n += 1 if n % 50 == 0: sleep(900) try: print ("Adding {}".format(user['id'])) if mode == 1: if user['username'] == "": continue user_to_add = client.get_input_entity(user['username']) elif mode == 2: user_to_add = InputPeerUser(user['id'], user['access_hash']) else: sys.exit("Invalid Mode Selected. Please Try Again.") client(InviteToChannelRequest(target_group_entity,[user_to_add])) print("Waiting for 60-180 Seconds...") time.sleep(random.randrange(60, 180)) except PeerFloodError: print("Getting Flood Error from telegram. Script is stopping now. Please try again after some time.") except UserPrivacyRestrictedError: print("The user's privacy settings do not allow you to do this. Skipping.") except: traceback.print_exc() print("Unexpected Error") continue |
I speak Python!
Majid Alizadeh is a freelance developer specialized in web development, web scraping and automation. He provides high quality and sophisticated software for his clients. Beside Python he works with other languages like Ruby, PHP and JS as well.
Amazing! Very Nice Dude!
Thanks, Daniel!
Hello, Thank you for this superb article.
I’m new to python can you please help me with this error
Traceback (most recent call last):
File “C:\Users\AffleTech\test.py”, line 22, in
input_file = sys.argv[1]
IndexError: list index out of range
Hi Sadiq! Have you added your file name to your CMD command?
Check the part of the tutorial under “Read Members from CSV File”. So you have to pass the file name (and path) to the Terminal/CMD command.
Otherwise, you can replace “input_file” with your CSV file path directly, line #24 of the code. In this case, delete the line “sys.argv[1]” from you code.
Good day Sir,
Please kindly give me a detailed explanation on how to Add my file name to my CMD command
I Successfully Created my CSV file . My Issues now is how to read the CSV file then after that I will continue with adding them to Group.
Thanks for your tutorials …
Afeexzy, please refer to the section “Read Members from CSV File”. You should have something like this in your CMD:
python sendMessage.py users.csv
you need to write the argument i.e., members.csv
so this is the command – add.py members.csv
Hi everyone! Where should i add my .csv file in the code?
Hi Manna! Check the part of the tutorial under “Read Members from CSV File”. So you have to pass the file name (and path) to the Terminal/CMD command.
Otherwise, you can replace “input_file” with your CSV file path directly, line #24 of the code. In this case, delete the line “sys.argv[1]” from you code.
Getting this error
Traceback (most recent call last):
File “C:\Users\AffleTech\updated_script – Copy.py”, line 85, in
client(InviteToChannelRequest(target_group_entity,[user_to_add]))
File “C:\Users\AffleTech\AppData\Local\Programs\Python\Python38\lib\site-packages\telethon\sync.py”, line 54, in syncified
return loop.run_until_complete(coro)
File “C:\Users\AffleTech\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py”, line 589, in run_until_complete
return future.result()
File “C:\Users\AffleTech\AppData\Local\Programs\Python\Python38\lib\site-packages\telethon\client\users.py”, line 59, in __call__
result = await future
telethon.errors.rpcerrorlist.UserIdInvalidError: Invalid object ID for a user. Make sure to pass the right types, for instance making sure that the request is designed for users or otherwise look for a different one more suited (caused by InviteToChannelRequest)
Unexpected Error
Hi Sadiq! How does your CSV file look like?
sendMessage.py = sys.argv[1]
members.csv = [] i dont get it ,, how do i state the location . can yall please help me with details, thank you
Hello! You have to add your file name and path to your Terminal/CMD command. Check the part of the tutorial under “Read Members from CSV File”.
Otherwise, you can replace “input_file” with your CSV file path directly, line #24 of the code. In this case, delete the line “sys.argv[1]” from you code.
i saw that comment all ready, i havent understood.
can you give me an example how does those three lines of script should look like
If you will use the Command Prompt to run your Python file, do not change the code at all, just type:
python sendMessage.py users.csv
This will work if your files are in the current folder; otherwise, change the path, for example:
python C:\Users\BijoRino\Desktop\sendMessage.py C:\Users\BijoRino\Desktop\users.csv
Please check this article also:
https://www.wikihow.com/Use-Windows-Command-Prompt-to-Run-a-Python-File
client.connect()
if not client.is_user_authorized():
client.send_code_request(phone)
client.sign_in(phone, input(‘Enter the code: ‘))
users = []
with open(C:\Users\BijoRino\Desktop, encoding=’UTF-8’) as f:
rows = csv.reader(f,delimiter=”,”,lineterminator=”\n”)
next(rows, None)
for row in rows:
user = {}
dosent work
Yes, this will not work. You should add the path between quotes. Also, the path here is missing the file name. What can work for example:
with open("C:\Users\BijoRino\Desktop\users.csv", encoding='UTF-8') as f:
So here, I have added the CSV file name to the path and made the path enclosed by “quotes”.
I hope this helps. Please let me know.
Perfect,
Both comments helped me thank you very much
i actually used ‘ to quote
THANK YOU
InviteToChannelRequest doesn’t work
Can you add event handler and update?
The tutorial worked for other people. Unless you are blocked, it should work.
What is the error message you get?
is there a way to make the script skip members that are already in the group?
what is this error and how to fix it. i am nooB.
Traceback (most recent call last):
File “C:\Users\siddu\Desktop\tg scrapper and adder\adder.py”, line 84, in
client(InviteToChannelRequest(target_group_entity,[user_to_add]))
File “C:\Users\siddu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\telethon\sync.py”, line 35, in syncified
return loop.run_until_complete(coro)
File “C:\Users\siddu\AppData\Local\Programs\Python\Python36-32\lib\asyncio\base_events.py”, line 468, in run_until_complete
return future.result()
File “C:\Users\siddu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\telethon\client\users.py”, line 60, in __call__
result = await future
telethon.errors.rpcerrorlist.UserIdInvalidError: Invalid object ID for a user. Make sure to pass the right types, for instance making sure that the request is designed for users or otherwise look for a different one more suited (caused by InviteToChannelRequest)
Hello! Try to run it with username instead and see if it works for you.
yeah. it is working with username. but people are not being added to the group even after it is showing as
adding 843785782
adding 238840254
but nobody is being added. . when i tried manually i got error #400 peer_flood
Same problem, Any soloution?
user[‘name’] = row[3]
users.append(user)
chats = []
last_date = None
chunk_size = 200
groups=[]
result = client(GetDialogsRequest(
offset_date=last_date,
offset_id=0,
I’m trying to configure the last_date
How am i suppose to define it?
Let’s say i want it to add users only seen in the last 7 days or less.
Thanks.
i have the same problem
ey bro have a problem with line 74
hello
i have a problem :
————————————
C:\Users\iMaN\Desktop\py>py add.py members.csv
Traceback (most recent call last):
File “add.py”, line 31, in
user[‘name’] = row[3]
IndexError: list index out of range
————————————-
example rows if members.csv(This file was created in the first application (scraping…)) :
,255631757,8575228332541770229
mily221,299132080,7406021434165398607
******
plz help me!
TnX
Good day Sir , my main issue lies on the send Message.py users.csv command
I tried that on my IDLE and Command prompt it Underlined the sendMessage.py .
Please help with detailed explanation at that specific part of the code.
Am running Windows 10 Python 3.7.3 with the latest Telethon.
Thanks …
You can instead set the file name explicitly in the code. So, instead of:
input_file = sys.argv[1]
You can have the file path between quotes like:
input_file = “c://foldername/users.csv”
Hello Sir, I Read the csv file but when i press 1 to add by Username it stop debugging am using Visual Studio code Please Help me with it
@afeezoo try using CMD or Terminal instead.
Hello Sir I’m done With All I Have a Issue now
To Skip Existing Users while Adding …
Afeexzy, apparently, you need to find out what usernames/IDs in your group and write a condition not to add existing users.
Great write up. Thanks for creating this resource.
I found that I need to use time for the sleep(900) call between every 50 users, ie: time.sleep(900)
Also, I found that I needed to wait longer than 900 seconds, have had positive results with 1800 seconds
Many thanks for your feedback, Camslice!
actually I spoke too soon, it seems Telegram keep changing their time limits for peer flood errors. seems to be somewhere between 12-24 hours now. requires a bit of trial and error
also i ended up adding sys.exit(1) for the peer flood exception to avoid the script continuing to attempt to add the next user
yes I ve experienced the same the limits time for flood error really varies. I had like 300 seconds after that I could send every 15 seconds (for a other tutorial) for about 20 messages then 400 seconds after that again 15 messages then like 80 seconds flood etc.. needs some trial and error 🙂
How can make anti-flood? every time i use that method i will be banned for 2/3 day, just after 5 action. why ?
Maybe you need another account. Use the script only reasonably and avoid spamming.
How to not get banned after using this script ?
people are not being added to the group even after it is showing as
adding 843785782
adding 238840254
but nobody is being added
got this error, but I can add through the telegram app.
Need help.
Maybe you have been banned.
Hi I’m a totally noob (: and have no idea what im doing wrong ,
I’ve installed pip,telethon
Now the script you gave us i replaced the correct ID,API,and phone number.
Now when i run the script > CMD > python.exe scriptname.py
It gives me an error Line 58 else:
IndentationError : unident does not match any outer identitaion level
):
Please try to study a Python introductory first.
I just finished extracting users from a group
I am now following the steps to add members to my group
I changed the csv file name to users.csv
When I write this code I get the following error
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)
this is the error i get
Traceback (most recent call last):
File “”, line 3, in
FileNotFoundError: [Errno 2] No such file or directory: ‘–mode=client’
Even if i add the csv location it still gives the same error.
Mitchel, apparently you are adding the file path in the wrong order. The error states you are giving a file named “–mode=client”; so make sure you add the argument correctly in your CMD/Terminal.
chats = []
last_date = None
chunk_size = 200
groups=[] My question is how to define”last_date” so i can retrieve only people connected last week per se? thanks in advance
BTW i avoid peerflood by adding every800-900 seconds, no stop breaks no nothing.
95\100 bots finished a 200 people list each, in 2 days without being spam..
just some info for yall. Peace
I could add only 50 users per day per phone number . Is there any steps where we can add proxy or giving multiple phone number and api key?
how can I ask the programme to skip members already in the group ?
@Ifeoluwa – one way is to extract the members in the old group to a list and add the new member only
if not in
the group.after i put my hash and api and run it it return error “expected an indented block” any thoughts ?thx
@Limbo – you need to revise the code indentation.