Сам пользуюсь, создавал для своего кореша в целях рекламы его продукта, и это работает. На обработку всех исключений времени не хватило, да и надобности не видел. Нужно будет - доработаете Скрипт берет акки на вход, ищет группы по ключевым словам и пишет под последний пост в комменты (если они не закрыты и если этот пост не закреп) __author__ = 'la4z' delay = 15 # Задержка перед отправкой import vk_api, os from time import strftime, sleep from sys import exit from random import choice import numpy as np def cout(text:str): print('{} {}'.format(strftime('[%H:%M:%S]'), text)) def update_token(token): global tokens if token in tokens: tokens.remove(token) while True: if len(tokens) == 0: cout("len(tokens) == 0 | Exit.") exit() else: token = choice(tokens) try: vks = vk_api.VkApi(token=token) vk = vks.get_api() vk.users.get() break except: tokens.remove(token) return vk def get_accounts(): if os.path.exists('accounts.txt'): with open('accounts.txt') as file: accs = file.read().split('\n') if '' in accs: accs.remove('') if len(accs) == 0: cout('len(accs) == 0 | Exit.') exit() else: cout('Loaded {} accounts.'.format(len(accs))) return accs else: with open('accounts.txt', 'w') as file: file.write("") cout('File "accounts.txt" not founded | Exit.') exit() accs = get_accounts() cout("Checking validation...") tokens = list() for acc in accs: if ':' in acc: a = acc.split(":") vks = vk_api.VkApi(a[0], a[1]) try: vks.auth() vk = vks.get_api() tokens.append(vks.token['access_token']) user = vk.users.get()[0] cout('Authorized : {} {} | Id : {}'.format(user['first_name'], user['last_name'], user['id'])) except Exception as e: cout(str(e)) else: vks = vk_api.VkApi(token=acc) try: vk = vks.get_api() user = vk.users.get()[0] tokens.append(vks.token['access_token']) cout('Authorized : {} {} | Id : {}'.format(user['first_name'], user['last_name'], user['id'])) except Exception as e: cout(str(e)) cout('Working tokens : {}'.format(len(tokens))) if len(tokens) == 0: cout('0 worked tokens. | Exit.') exit() cout('Starting threads.') # Main function # message = input('Please, write your message for comments. #:') # For message q = input('Please, enter your search request for groups. (,) #: ').split(",") # Query token = choice(tokens) vks = vk_api.VkApi(token=token) vk = vks.get_api() user = vk.users.get()[0] groups = list() for group_name in q: groups = np.append(groups, vk.groups.search(q=group_name, count=200)['items']) for group in groups: try: if not bool(vk.groups.getById(group_id=group['id'])[0]['is_closed']): posts = vk.wall.get(owner_id=-group['id'], count=2)['items'] if bool(posts[0].get("is_pinned")): post = posts[0] else: post = posts[1] if bool(post['comments']['can_post']): vk.wall.createComment(owner_id=-group['id'], post_id=post['id'], message=message) cout('Group id : {} | Message sended'.format(group['id'])) sleep(delay) except Exception as e: print(e) vk = update_token(token) cout("End script") Код __author__ = 'la4z' delay = 15 # Задержка перед отправкой import vk_api, os from time import strftime, sleep from sys import exit from random import choice import numpy as np def cout(text:str): print('{} {}'.format(strftime('[%H:%M:%S]'), text)) def update_token(token): global tokens if token in tokens: tokens.remove(token) while True: if len(tokens) == 0: cout("len(tokens) == 0 | Exit.") exit() else: token = choice(tokens) try: vks = vk_api.VkApi(token=token) vk = vks.get_api() vk.users.get() break except: tokens.remove(token) return vk def get_accounts(): if os.path.exists('accounts.txt'): with open('accounts.txt') as file: accs = file.read().split('\n') if '' in accs: accs.remove('') if len(accs) == 0: cout('len(accs) == 0 | Exit.') exit() else: cout('Loaded {} accounts.'.format(len(accs))) return accs else: with open('accounts.txt', 'w') as file: file.write("") cout('File "accounts.txt" not founded | Exit.') exit() accs = get_accounts() cout("Checking validation...") tokens = list() for acc in accs: if ':' in acc: a = acc.split(":") vks = vk_api.VkApi(a[0], a[1]) try: vks.auth() vk = vks.get_api() tokens.append(vks.token['access_token']) user = vk.users.get()[0] cout('Authorized : {} {} | Id : {}'.format(user['first_name'], user['last_name'], user['id'])) except Exception as e: cout(str(e)) else: vks = vk_api.VkApi(token=acc) try: vk = vks.get_api() user = vk.users.get()[0] tokens.append(vks.token['access_token']) cout('Authorized : {} {} | Id : {}'.format(user['first_name'], user['last_name'], user['id'])) except Exception as e: cout(str(e)) cout('Working tokens : {}'.format(len(tokens))) if len(tokens) == 0: cout('0 worked tokens. | Exit.') exit() cout('Starting threads.') # Main function # message = input('Please, write your message for comments. #:') # For message q = input('Please, enter your search request for groups. (,) #: ').split(",") # Query token = choice(tokens) vks = vk_api.VkApi(token=token) vk = vks.get_api() user = vk.users.get()[0] groups = list() for group_name in q: groups = np.append(groups, vk.groups.search(q=group_name, count=200)['items']) for group in groups: try: if not bool(vk.groups.getById(group_id=group['id'])[0]['is_closed']): posts = vk.wall.get(owner_id=-group['id'], count=2)['items'] if bool(posts[0].get("is_pinned")): post = posts[0] else: post = posts[1] if bool(post['comments']['can_post']): vk.wall.createComment(owner_id=-group['id'], post_id=post['id'], message=message) cout('Group id : {} | Message sended'.format(group['id'])) sleep(delay) except Exception as e: print(e) vk = update_token(token) cout("End script") Наговнокодил так как срал на оптимизацию, лиж бы работало. Скрипт создаёт файл accounts.txt рядом с собой, в него можно заливать либо акки в формате лог:пасс либо токены. Ключевые слова для поиска групп можно вставлять разные через запятую. Count поиска изменяйте под себя Вроде бы всё, в будущем слеплю ещё подобных скриптов
la4zen, так же смотрю на эту жизнь. Работает и похуй на все и как правило стабильность работы скрипта с таким отношением получается куда лучше неже если сидеть задрачиваться ))))