Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- TESTOWANY NA WINDOWS 10 I ŁOJARZU (nie działa na waylandzie)
- CO TEN SKRYPT POTRAFI:
- 1. wybiera załącznik (losowy)
- 2. dosrywa do niego bajty, aby uniknąć duplikatów
- 3. wkleja wiadomość, losową lub jedną konkretną.
- 4. może do niej dokleić emotkę z biblii (np "JEBAĆ MODERACJĘ :-)")
- 5. omija słowofiltry używając unicodów (jak mode się połapie to dojebie słowofiltry
- 6. zapamiętuje i bumpuje własne tematy (traci je przy ponownym uruchomieniu)
- 7. wykrywa bana (tylko przy wyłączonym javascripcie, bo wtedy zostaje przekierowany do banned.php)
- URUCHOMIENIE PO RAZ PIERWSZY (10-15min):
- 1. zacznij od instalacji Pycharm Community Edition, ok. 3min
- 2. po otwarciu nowego projektu wklej ten skrypt, możliwe, że będziesz musiał
- dodać nowy plik do projektu, wtedy:
- - prawy przycisk na główny folder projektu (po lewo, zapewne pythonProject1)
- - New -> Python file -> nazwa: 'main.py' -> <enter>
- 3. odnajdź zakładkę 'terminal'. w starszej wersji UI jest na dole, w nowej (nieopisana, poza małym symbolem) po lewo,
- też gdzieś u dołu
- 4. wpisz w terminalu 'pip install pynput pyautogui', poczekaj na zakończenie instalacji
- WAŻNE: zwróć teraz uwagę na sekcję 'USTAWIENIA', znajduje się ona ok. 160 linijki.
- masz w niej wyjaśnione czego dotyczy każda zmienna. najlepiej zapoznaj się z nią teraz
- 5. teraz otwórz kara. zauważ, że gdy wejdziesz w istniejący już temat to formularz do postowania znajdzie się
- nieco niżej niż przy lurkowaniu samej deski. musisz usunąć ublockiem elementy za to odpowiedzialne, manualnie albo
- po prostu wklej te filtry:
- karachan.org##.postingMode
- karachan.org##body > .navLinks
- skrypt polega na wskazanych współrzędnych na ekranie, jeden raz - przy starcie. ich zmiana wszystko rozjebie
- 6. po feralnym uruchomieniu skryptu musisz już tylko wskazać miejsce w którym znajdują się:
- - pasek adresu
- - pole wiadomości
- - przycisk do załączenia pliku (zamknij okno eksploratora plików klikając esc)
- - przycisk do wysłania posta (okno z błędem 'brak pliku' zamknij myszką)
- ale poczekaj
- 7. skrypt nie ma pojęcia co się dzieje na ekranie. wszystko opiera się na oszacowanym czasie oczekiwania potrzebnym do wykonania
- każdej akcji, przed zasrywaniem przetestuj podany przez siebie 'wait_factor' (zmienna odpowiedzialna za określenie
- czasu oczekiwania po wykonaniu każdej akcji np czas uśpienia po przesłaniu posta jest jego dwukrotnością w sekundach,
- dla innych akcji jest jakimś tam ułamkiem). test powinien przebiegać tak:
- - upewnij się, że jesteś na samej górze strony, co do piksela
- - sprawdź czy formularz odpowiedzi po otwarciu istniejącego tematu (ten u góry)
- jest otwarty (to ustawienie jest zapamiętywane)
- - jeżeli podpowiedzi do paska adresu całkowicie zasłaniają pole wiadomości - oddal lub przybliż widok
- - wskaż poprawnie wszystkie współrzędne poza tą dla wysyłania - nie chcesz raidować
- nie mając pewności, że skrypt działa poprawnie
- - zostaw na chwilę, obserwuj czy nie popełnia błędów
- 8. uruchom skrypt we właściwy sposób:
- - upewnij się, że jesteś na samej górze strony, co do piksela
- - sprawdź czy formularz odpowiedzi w istniejących tematach jest otwarty
- - jeżeli podpowiedzi do paska adresu całkowicie zakrywają pole wiadomości - oddal lub przybliż widok
- - wskaż poprawnie wszystkie współrzędne
- - zacznie działać
- - teraz upewnij się tylko że 'wait_factor' jest wystarczający również dla czasu potrzebnego do wysłania posta
- ^ nie jest to konieczne gdy podana wartość została już przetestowana
- Przy pierwszym raidzie obserwuj zachowanie skryptu
- '''
- import os
- import pyautogui
- from pynput import mouse
- import pyperclip
- import platform
- import random
- import time
- from math import floor
- biblia = ["xd","xD",";d",":D",";D",":O",":s",":)",":(",";)","8D","8)",":3",";3","^^","XD",":-)",":P",";p",";P",":p",":-P",":-("]
- hipis = [
- 'no ja to po prostu naprawdę nie wiem jak można mnie kurwa nie kochać',
- 'pevaćemo igraćemo napićemo se',
- 'noo kolego stare baby są moje',
- 'mode pedał z karachuja zobaczył putasa nic mu kundel nie mógł zrobić possał mu kutasa',
- 'jebana przygłupia kurwa zza konsolety',
- 'do budy i morda kurwo wulkaniarska',
- 'no to by trzeba twoją matkę spytać',
- 'no i do budy pędzlata kurwo przecwelona',
- 'nie chciałbym nikogo martwić ani denerwować ale podobno na tej marnej nędznej parodii czana ukrywa się hipis',
- 'nawet fajne te hipisy daję okejkę i soga',
- 'karaczana lurkować chciałem ale nie z modem z diskorda pedałem',
- 'karaczan kurwa raczej rakaczan srakaczan',
- 'noo twoją matkę w szczególności',
- 'do trzech razy sztuka gdy się wam starą puka',
- 'wulkan kurwa przecwelona spermę wyjada z kondoma',
- 'do budy',
- 'hipisław czana zbaw',
- 'zawsze i wszędzie hipis najlepszy będzie',
- 'hipis grasuje hipis grasuje głupie diskurwy on reguluje',
- 'kundel niech spierdala',
- 'diskurwy chuja mogą jak zwykle zresztą',
- 'wulkan ty cwelu jebany',
- 'zawsze i wszędzie moderatorska kurwa jebana będzie',
- 'do budy diskurwy',
- 'na chuj wy kundle żyjecie',
- 'popłacz się kundlu jebany',
- 'ale chujnia na tej parodii czana',
- 'moderatorskiej kurwie zawsze chuj do mordy',
- 'obawiam się że tu gdzieś hipis grasuje',
- 'a ja na kara sram',
- 'do budy kurwo moderatorska przecwelona',
- 'Jakub Putowski jest dla mnie najlepszy',
- ]
- odmety = [
- 'and your ban expires on 05/03/2137',
- 'A JA NA KARA SRAM',
- 'ZAWSZE I WSZĘDZIE MODERATORSKA KURWA JEBANA BĘDZIE',
- 'MODERATORSKIEJ KURWIE ZAWSZE CHUJ DO MORDY',
- 'and your ban expires [b]never[/b].',
- 'forsorak',
- 'hipis',
- '[b]NIEDOGODNOŚĆ?[/b]',
- 'You have been [b]permamently[/b] banned from [b]all[/b] boards',
- 'rak',
- 'atencja; dawanie atencji',
- 'WULKAN KURWA PRZECWELONA SPERMĘ WYJADA Z KONDOMA',
- 'You are banned ;_;',
- '[b]*Range ban[/b] - to oznacza, ty pierdolony idioto, że NIE otrzymałeś bana personalnie ty jako ty, tylko cały zakres twojej sieci. Innymi słowy raczyć mógł ktokolwiek, z kim dzielisz zakres numerów IP.',
- 'na twoim zakresie grasuje hipis',
- 'forsowanie',
- '[b]UBOLEWANIE?[/b]',
- 'Powód:',
- 'Zostałeś zbanowany!',
- 'You may not appeal your ban.',
- 'MODE PEDAŁ Z KARACHUJA ZOBACZYŁ PUTASA NIC MU KUNDEL NIE MÓGŁ ZROBIĆ POSSAŁ MU KUTASA',
- 'RAKACZAN SRAKACZAN',
- '[b]ZGRYZOTA?[/b]',
- 'OBAWIAM SIĘ ŻE TU GDZIEŚ HIPIS GRASUJE',
- 'DO BUDY KURWO MODERATORSKA PRZECWELONA',
- 'There are more than one bans placed on your IP',
- 'raid',
- 'which is 72 days from now.',
- 'You have been [b]permamently range*-[/b]banned',
- 'hipis',
- ]
- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- '''
- To są twoje USTAWIENIA - jedyne parametry, które należy zmienić
- apply_bible - dokleja do wiadomości biblijne emotki (True, False)
- shutdown - zamknąć system po zasrywaniu? (windows albo systemd)
- obfuscate - użyje unicodów to ominięcia słowofiltrów, mode może przyjebać również słowofiltr
- na unicody, wtedy = False i nie używaj już biblii oraz moich list (ew popraw je)
- board - obecnie zasrywana deska, ważne (np = 'karachan.org/trv')
- path - np /home/user/hipis dla Linuxa, na windowsie np C:\Users\Anon\hipis, może prowadzić tylko
- do folderu, nie bezpośrednio do pliku
- start_time - godzina o której zacznie zasrywać np '01:37', przy ustawieniu 'teraz' nie będzie czekać wcale
- message_source - wybrana wiadomość, zwykły tekst (= "mode kundel") lub cała lista
- cooldown - opcjonalny cooldown w sekundach
- target_size_mb - określa docelową wagę pliku, pośrednio liczbę załączonych bajtów. uwzględnij szybkość swojego łącza
- oraz rozmiar swoich plików - za mało doklejonych bajtów oznacza prawdopodobieństwo otrzymania duplikatu.
- wait_factor - niektóre komputery działają wolniej, chujowe łącze też nie pomaga. podana wartość pozwala określić
- czas oczekiwania na wykonanie każdej akcji (kliknięcie, przesłanie, wklejenie itd.)
- ^ (WAŻNE: przetestuj to ustawienie przed faktycznym użyciem, wypełnij polecenia z INSTRUKCJI)
- '''
- apply_bible = True
- shutdown = False
- obfuscate = False
- board = 'karachan.org/b' #ważne
- path = f'C:/home/users/User/twoj folder' # koniecznie folder, nie plik. pamiętaj: to 'f' musi tam być
- start_time = 'teraz' # 'teraz' zaczyna natychmiast, a np = '1:37' poczeka
- message_source = hipis # lub np = "JEBAĆ MODERACJĘ" albo jedna z list powyżej: hipis, odmety
- cooldown = 0 # a jak ci zależy to np: random.choice(range(0, 20)) albo po prostu jakaś wartość
- target_size_mb = 10 # nie może przekroczyć 11.9
- wait_factor = 10 # testowane dla łącza 1gb/s i mocniejszego kompa przy target_size_mb = 11.9
- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- allowed_extensions = ('.png', '.jpg', '.gif', '.mp4', '.webm') #'.png', '.jpg', '.gif', '.mp4', '.webm'
- my_threads = []
- banned, sent = False, False
- prev_message = ''
- post_count, bump_count, i = 0, 0, 0
- def get_click_position():
- coordinates = []
- def on_click(x, y, button, pressed):
- if button == mouse.Button.left and pressed:
- coordinates.append((x, y))
- return False # kills the listener
- with mouse.Listener(on_click=on_click) as listener:
- listener.join() # catch the moment when the listener stops
- x, y = coordinates[0]
- print(f"{x}, {y}")
- return x, y
- def sytem_shutdown ():
- if platform.system() == 'Linux':
- os.system('shutdown now') #systemd
- elif platform.system() == 'Windows':
- os.system('shutdown /s /f /t 0')
- else: print('spierdalaj')
- def where_to_click ():
- print('\npole adresowe')
- address = get_click_position()
- print('\npole wiadomości')
- message = get_click_position()
- print('\n"wybierz plik"')
- file = get_click_position()
- print('\nwyslij wiadomosc')
- send = get_click_position()
- print('\nok\n')
- return address, message, file, send
- def wait(target_time_str):
- if target_time_str == 'teraz': return
- target_hour, target_minute = map(int, target_time_str.split(":"))
- current_time = time.localtime()
- current_hour = current_time.tm_hour
- current_minute = current_time.tm_min
- current_second = current_time.tm_sec
- current_total_seconds = current_hour * 3600 + current_minute * 60 + current_second
- target_total_seconds = target_hour * 3600 + target_minute * 60
- if target_total_seconds <= current_total_seconds:
- target_total_seconds += 24 * 3600 # skip to the next day
- wait_time = target_total_seconds - current_total_seconds
- wait_time_hours = str(round(wait_time/3600)) + 'h i ' + str(round((wait_time%3600)/60)) + ' min'
- print('zaczynam zasrywanie o', target_time_str, 'czyli za', wait_time_hours, '\naktualna godzina to', time.strftime("%H:%M"))
- time.sleep(wait_time)
- print('no to jechane z tym koksem')
- time.sleep(4)
- def copy_to_clipboard(text):
- pyperclip.copy(text)
- time.sleep(wait_factor * 0.05)
- def paste_text(text):
- copy_to_clipboard(text)
- time.sleep(wait_factor * 0.05)
- pyautogui.hotkey('ctrl', 'v')
- def click(loc, wait_time):
- pyautogui.click(loc)
- time.sleep(wait_time)
- def press(key, wait_time):
- pyautogui.press(key)
- time.sleep(wait_time)
- def hotkey(hot_key, wait_time):
- pyautogui.hotkey(hot_key)
- time.sleep(wait_time)
- def post(message, relatywny, message_loc, file_loc, address_loc, send_loc):
- #paste message
- click(message_loc, wait_factor * 0.01)
- paste_text(message)
- #załącz relatywny
- click(file_loc, wait_factor * 0.05)
- paste_text(relatywny)
- press('enter', wait_factor * 0.05)
- #wyślij, poczekaj aż się załaduje
- click(send_loc, wait_factor * 2)
- #pobierz adres, zapamiętaj freda do bumpów
- click(address_loc, wait_factor * 0.01)
- hotkey(('ctrl', 'c'), wait_factor * 0.01)
- click(message_loc, wait_factor * 0.01)
- address = pyperclip.paste()
- if address == 'https://karachan.org/imgboard.php': return False
- my_threads.append(address)
- #powrót na deskę
- click(address_loc, wait_factor * 0.01)
- press('backspace', wait_factor * 0.01)
- paste_text(board)
- press('enter', wait_factor * 0.5)
- def bump(message, relatywny, message_loc, file_loc, address_loc, send_loc):
- thread = my_threads[0]
- click(address_loc, wait_factor * 0.01)
- press('backspace', wait_factor * 0.01)
- paste_text(thread)
- press('enter', wait_factor * 0.5)
- click(message_loc, wait_factor * 0.01)
- paste_text(message)
- click(file_loc, wait_factor * 0.1)
- paste_text(relatywny)
- press('enter', wait_factor * 0.1)
- click(send_loc, wait_factor * 2)
- my_threads.remove(thread)
- my_threads.append(thread)
- click(address_loc, wait_factor * 0.01)
- press('backspace', wait_factor * 0.01)
- paste_text(board)
- press('enter', wait_factor * 0.5)
- def append_bytes(file_path, dir, i, target_size_mb):
- output_dir = os.path.join(dir, 'mod')
- try:
- if not os.path.exists(output_dir):
- os.makedirs(output_dir)
- target_size_bytes = floor(target_size_mb * 1024 * 1024)
- current_size = os.path.getsize(file_path)
- bytes_to_add = target_size_bytes - current_size
- if bytes_to_add <= 0:
- print(f"The file is already {current_size} bytes, which is larger than or equal to the target size.")
- return
- random_bytes = bytearray(random.getrandbits(8) for _ in range(bytes_to_add))
- output_file_path = os.path.join(output_dir, str(i)+os.path.splitext(file_path)[1])
- with open(file_path, 'rb') as src_file:
- with open(output_file_path, 'wb') as dest_file:
- dest_file.write(src_file.read())
- with open(output_file_path, 'ab') as file:
- file.write(random_bytes)
- return output_file_path
- except Exception as e:
- print(f"An error occurred: {e}")
- def obfuscate_source():
- obfuscated_sentences = []
- forbidden_list = [
- "xd","xD",";d",":D",";D",":O",":s",":)",":(",";)","8D","8)",":3",";3","^^","XD",":-)",":P",";p",";P",":p",":-P",":-(",
- "dis","putas","kund","piastows",
- "wulkan","przecwe","moderatorsk","zawsze","parodii","spermę","rakaczan","pędz","kurwa","konsolet","karach","possał","hipis","bud","mord"
- # ta ostatnia linijka trochę losowo dojaban bo zacząłem się głubić w tych słowofiltrach
- ]
- def obfuscate_word(word):
- for forbidden_pattern in forbidden_list:
- if forbidden_pattern in word.lower():
- word = word.replace('a', 'а')
- word = word.replace('A', 'Α')
- word = word.replace('d', 'ԁ')
- word = word.replace('D', 'Ꭰ')
- word = word.replace('i', 'і')
- word = word.replace('p', 'р')
- word = word.replace('P', 'Р')
- word = word.replace('s', 'ѕ')
- word = word.replace('S', 'Ѕ')
- word = word.replace('T', 'Τ') #3a4
- word = word.replace(':', '։')
- word = word.replace(';', ';')
- word = word.replace(')', ')')
- #word = word.replace('^^', 'dupa') na chwilę obecną niepotrzebny
- return word
- for sentence in message_source:
- words = sentence.split()
- redacted_words = [obfuscate_word(word) for word in words]
- obfuscated_sentences.append(' '.join(redacted_words))
- for item in biblia:
- words = item.split()
- redacted_words = [obfuscate_word(word) for word in words]
- obfuscated_sentences.append(' '.join(redacted_words))
- return obfuscated_sentences
- def random_embed(embeds):
- if not embeds:
- raise ValueError('brak plikow o odpowiednich rozszerzeniach')
- return os.path.join(path, random.choice(embeds))
- def main ():
- is_list = type(message_source) == list
- is_path_dir = os.path.isdir(path)
- embeds = [rel for rel in os.listdir(path) if rel.lower().endswith((allowed_extensions))]
- print(' '+str(len(message_source)) + ' wiadomosci\n' if is_list else "jedna wiadomosc", len(embeds), 'relatywnych\n')
- address_loc, message_loc, file_loc, send_loc = where_to_click()
- if obfuscate: obfuscate_source()
- wait(start_time)
- last_post_time = time.time() - 300
- last_bump_time = time.time()
- exec_start = time.time()
- while not banned:
- print('moje tematy: [\n', "\n".join(str(thread) for thread in my_threads)+'\n]')
- # relatywny i wiadomość
- if is_list:
- message = random.choice(message_source)
- while message == prev_message:
- message = random.choice(message_source)
- prev_message = message
- else: message = message_source
- if apply_bible == True:
- message = message + ' ' + random.choice(biblia)
- if is_path_dir:
- embed = random_embed(embeds)
- elif not is_path_dir:
- embed = path
- else:
- raise ValueError(f" '{path}' nie istnieje")
- embed = append_bytes(embed, path, i, target_size_mb)
- i = i + 1
- # wysyłanie
- while not sent:
- if time.time() - last_post_time >= 300: # cooldown po nowym temacie
- print('\nNOWY POST', '\n', message, '\n', embed)
- if post(message, embed, message_loc, file_loc, address_loc, send_loc) != False:
- print('\n\n b a n')
- banned = True
- last_post_time = time.time()
- sent = True
- post_count+=1
- elif time.time() - last_bump_time >= 20: # cooldown po bumpie
- print('\nBUMP', my_threads[0], '\n', message, '\n', embed)
- bump(message, embed, message_loc, file_loc, address_loc, send_loc)
- last_bump_time = time.time()
- sent = True
- bump_count+=1
- else:
- time.sleep(0.1)
- sent = False
- if shutdown:
- sytem_shutdown()
- else:
- exec_time_hm = str(round((time.time()-exec_start)/3600)) + ':' + str(round(((time.time()-exec_start)%3600)/60))
- print('\nkoniec zasrywania', 'posty:', post_count, '\nbumpy:', bump_count, '\nw przeciągu:', exec_time_hm, '\n(orientacyjnie)')
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment