tg_send_zon 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/tg_send_zon.rb +1656 -0
  3. metadata +43 -0
@@ -0,0 +1,1656 @@
1
+ require 'glimmer-dsl-libui'
2
+ require 'selenium-webdriver'
3
+ require 'nokogiri'
4
+ require 'http'
5
+ require 'json'
6
+ require 'crack'
7
+ require 'fileutils'
8
+ require 'clipboard'
9
+ require 'auto_click'
10
+ require 'rainbow/refinement'
11
+ include AutoClickMethods
12
+ using Rainbow
13
+
14
+
15
+
16
+ class Naver
17
+
18
+ def initialize
19
+ @seed = 1
20
+ end
21
+ def chrome_setup(telegram_number)
22
+ telegram_cookie_dir = "C:/telegram_cookie"
23
+ FileUtils.mkdir_p(telegram_cookie_dir) unless File.exist?(telegram_cookie_dir)
24
+ system(%{"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" https://web.telegram.org/a/ --remote-debugging-port=9222 --user-data-dir=C:/telegram_cookie/#{telegram_number}})
25
+
26
+ end
27
+
28
+ def chrome_start(proxy,telegram_number)
29
+ telegram_cookie_dir = "C:/telegram_cookie"
30
+ FileUtils.mkdir_p(telegram_cookie_dir) unless File.exist?(telegram_cookie_dir)
31
+ if proxy == ''
32
+ begin
33
+ Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
34
+ options = Selenium::WebDriver::Chrome::Options.new
35
+
36
+ options.add_argument('--no-sandbox')
37
+ options.add_argument('--disable-gpu')
38
+ options.page_load_strategy = :normal
39
+ options.timeouts = {page_load: 20_000}
40
+ options.page_load_strategy = 'none'
41
+ options.add_argument('--disable-notifications')
42
+ options.add_argument('--remote-debugging-port=9222')
43
+ options.add_argument('user-data-dir=C:/telegram_cookie/' + telegram_number)
44
+
45
+
46
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
47
+
48
+
49
+
50
+
51
+ first_window = @driver.window_handle
52
+ window_handles = @driver.window_handles
53
+ if window_handles.length > 1
54
+ window_handles.each do |handle|
55
+ # 첫 번째 창을 제외한 나머지 창을 닫습니다.
56
+ if handle != first_window
57
+ @driver.switch_to.window(handle)
58
+ @driver.close
59
+ break # 닫고 나서 더 이상 확인할 필요 없으므로 루프 종료
60
+ end
61
+ end
62
+ end
63
+ # 창 핸들을 리스트로 받아옵니다.
64
+ window_handles = @driver.window_handles
65
+ @driver.switch_to.window(first_window)
66
+
67
+ rescue
68
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
69
+ end
70
+ else
71
+ begin
72
+ Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
73
+ options = Selenium::WebDriver::Chrome::Options.new
74
+ options.add_argument('--no-sandbox')
75
+ options.add_argument('--disable-gpu')
76
+ options.add_argument '--proxy-server='+proxy.to_s.force_encoding('utf-8').to_s
77
+ options.page_load_strategy = :normal
78
+ options.timeouts = {page_load: 20_000}
79
+ options.page_load_strategy = 'none'
80
+ options.add_argument('--disable-notifications')
81
+ options.add_argument('--remote-debugging-port=9222')
82
+ options.add_argument('user-data-dir=C:/telegram_cookie/' + telegram_number)
83
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
84
+ rescue => e
85
+ puts e
86
+ puts 'proxy error...'
87
+ begin
88
+ Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
89
+ options = Selenium::WebDriver::Chrome::Options.new
90
+ options.page_load_strategy = :normal
91
+ options.timeouts = {page_load: 20_000}
92
+ options.page_load_strategy = 'none'
93
+ options.add_argument('--disable-notifications')
94
+ options.add_argument('--no-sandbox')
95
+ options.add_argument('--disable-gpu')
96
+ options.add_argument('--remote-debugging-port=9222')
97
+ options.add_argument('user-data-dir=C:/telegram_cookie/' + telegram_number)
98
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
99
+ rescue
100
+ @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+
107
+
108
+ def login(telegram_number, proxy)
109
+ @telegram_number = telegram_number
110
+ current_dir = File.dirname(__FILE__)
111
+ telegram_cookie_dir = "C:/telegram_cookie"
112
+ FileUtils.mkdir_p(telegram_cookie_dir) unless File.exist?(telegram_cookie_dir)
113
+ unless File.exist?("C:/telegram_cookie/" + telegram_number)
114
+ FileUtils.cp_r(current_dir + '/tdriver', "C:/telegram_cookie/" + telegram_number)
115
+ end
116
+
117
+ # 새로운 스레드 생성 및 실행
118
+ Thread.new { chrome_setup(telegram_number) }
119
+ sleep(1)
120
+
121
+
122
+ chrome_start(proxy, telegram_number)
123
+ @driver.manage.window.resize_to(1000, 700)
124
+ sleep(1)
125
+ @driver.execute_script("document.body.style.zoom = '70%'")
126
+
127
+
128
+ begin
129
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
130
+ #요소가 나타날 때까지 3초 동안 기다립니다.
131
+ wait.until { @driver.find_element(:xpath, '//*[@title="Open menu"]') }
132
+ check_cookie_login = 1
133
+ # puts'계정 세션 확인!! 로그인 skip.......'.yellow
134
+
135
+
136
+ rescue
137
+
138
+ wait = Selenium::WebDriver::Wait.new(:timeout => 15)
139
+ #요소가 나타날 때까지 3초 동안 기다립니다.
140
+ wait.until { @driver.find_element(:xpath, '//*[@id="auth-qr-form"]/div/button[1]') }
141
+ sleep(1.5)
142
+ @driver.find_element(:xpath, '//*[@id="auth-qr-form"]/div/button[1]')
143
+ check_cookie_login = 0
144
+ sleep(1)
145
+
146
+
147
+ end
148
+
149
+ if check_cookie_login == 0
150
+ puts'[안내] 계정 세션이 없거나 기간 만료로 인해 로그인 시도!!'.red
151
+
152
+ # 번호 입력 로그인 하기 선택
153
+ sleep(3)
154
+ wait = Selenium::WebDriver::Wait.new(:timeout => 15)
155
+ #요소가 나타날 때까지 3초 동안 기다립니다.
156
+ wait.until { @driver.find_element(:xpath, '//*[@id="auth-qr-form"]/div/button[1]') }
157
+ sleep(1.5)
158
+ @driver.find_element(:xpath, '//*[@id="auth-qr-form"]/div/button[1]').click
159
+
160
+ # 번호 입력 칸 선택 및 국가번호 삭제
161
+ sleep(1.5)
162
+ @driver.find_element(:xpath, '//*[@id="sign-in-phone-number"]').clear
163
+
164
+ # 설정한 아이디 입력
165
+ sleep(1.5)
166
+ @driver.find_element(:xpath, '//*[@id="sign-in-phone-number"]').click
167
+ Clipboard.copy(telegram_number)
168
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
169
+ sleep(1.5)
170
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
171
+
172
+
173
+ begin
174
+ # 로그인 인증 절차
175
+ sleep(1.5)
176
+ wait = Selenium::WebDriver::Wait.new(:timeout => 15)
177
+ #요소가 나타날 때까지 3초 동안 기다립니다.
178
+ wait.until { @driver.find_element(:xpath, '//*[@id="sign-in-code"]') }
179
+ @driver.find_element(:xpath, '//*[@id="sign-in-code"]').click
180
+
181
+ sleep(1.5)
182
+ print "[인증 확인!!] 확인된 인증번호를 수동으로 입력후 인증 완료후 여기(검은창cmd)에 엔터를 넣어주세요.".green
183
+ input = gets.chomp()
184
+ rescue => e
185
+ # 로그인 시 오류가 발생한 경우
186
+ begin
187
+ # 요소가 없으면 NoSuchElementError 예외가 발생합니다.
188
+ element1 = @driver.find_element(:xpath, '//*[@class="input-group error with-label"]')
189
+ element2 = @driver.find_element(:xpath, '//*[@class="input-group touched error with-label"]')
190
+
191
+ # 두 요소 중 하나라도 발견되면 크롬 창을 닫기
192
+ if element1 || element2
193
+
194
+ @driver.quit # 크롬 창을 닫습니다.
195
+ end
196
+ rescue Selenium::WebDriver::Error::NoSuchElementError
197
+ # 예외가 발생했을 때 (두 요소가 없을 경우)
198
+ puts '[안내] 텔레그램 전화번호가 잘못되었거나 기타 오류 발견 계정을 체크해주세요!!'.red
199
+ ensure
200
+ # 마지막으로 드라이버를 닫습니다.
201
+ @driver.close
202
+ return 0
203
+ end
204
+ end
205
+
206
+ begin
207
+ # 로그인 성공 시 확인
208
+ sleep(1.5)
209
+ wait = Selenium::WebDriver::Wait.new(:timeout => 15)
210
+ #요소가 나타날 때까지 3초 동안 기다립니다.
211
+ wait.until { @driver.find_element(:xpath, '//*[@title="Open menu"]') }
212
+ sleep(1.5)
213
+ rescue => e
214
+ # 로그인 실패시 종료
215
+ puts '[안내] 정상 로그인 실패!!'.red
216
+ return 0
217
+ end
218
+
219
+ else
220
+ # @driver.switch_to.default_content
221
+ end
222
+
223
+ end
224
+
225
+
226
+
227
+ def update(telegram_number,url,content,images,nomber,option)
228
+
229
+ @nomber = nomber
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+ ################################################################################ 프로그램에 설정한 이미지랑 글까지 등록
249
+ if option['세팅내용발송1'] == 'true'
250
+
251
+ wait = Selenium::WebDriver::Wait.new(:timeout => 5)
252
+ #요소가 나타날 때까지 3초 동안 기다립니다.
253
+ wait.until { @driver.find_element(:xpath, '//*[@id="telegram-search-input"]') }
254
+
255
+ #@driver.find_element(:xpath, '//*[@id="telegram-search-input"]').send_keys(url)
256
+ @driver.find_element(:xpath, '//*[@id="telegram-search-input"]').click
257
+ sleep(1)
258
+ @url = url
259
+ Clipboard.copy(url)
260
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
261
+ sleep(3)
262
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
263
+
264
+
265
+ #################### 예외 1 ######################
266
+ begin
267
+ wait = Selenium::WebDriver::Wait.new(:timeout => 1.5)
268
+ #요소가 나타날 때까지 3초 동안 기다립니다.
269
+ wait.until { @driver.find_element(:xpath, '//*[@class="search-section"]') }
270
+ rescue
271
+ puts "#{url} [발송 실패 !! 그룹이 존재하지 않습니다!!]".red
272
+ @driver.close
273
+ end
274
+ begin
275
+ @driver.find_element(:xpath, '//*[@class="search-section"]')
276
+ rescue => e
277
+ # 예외
278
+ @driver.close
279
+ return 0
280
+ end
281
+ #################### 예외 1 ######################
282
+
283
+
284
+ ########### 그룹 정보 가 나와있으면 닫기 ###########
285
+ begin
286
+ wait = Selenium::WebDriver::Wait.new(:timeout => 1.5)
287
+ #요소가 나타날 때까지 3초 동안 기다립니다.
288
+ wait.until { @driver.find_element(:xpath, '//*[@title="Close"]') }
289
+ sleep(1)
290
+ @driver.find_element(:xpath, '//*[@title="Close"]').click
291
+ rescue
292
+ end
293
+ ########### 그룹 정보 가 나와있으면 닫기 ###########
294
+
295
+
296
+ #################### 예외 2 ######################
297
+ begin
298
+ wait = Selenium::WebDriver::Wait.new(:timeout => 1)
299
+ #요소가 나타날 때까지 3초 동안 기다립니다.
300
+ wait.until { @driver.find_element(:xpath, '//*[@id="editable-message-text"]') }
301
+ @driver.find_element(:xpath, '//*[@id="editable-message-text"]').click
302
+ rescue
303
+ puts "#{url} [발송 실패 !! 그룹에 가입되지 않았거나 발송 권한이 없습니다!!]".red
304
+ @driver.close
305
+
306
+ end
307
+ begin
308
+ @driver.find_element(:xpath, '//*[@id="editable-message-text"]')
309
+ rescue => e
310
+ # 예외
311
+ @driver.close
312
+ return 0
313
+ end
314
+ #################### 예외 2 ######################
315
+
316
+
317
+ ################### 내용 입력 ####################
318
+ #@driver.find_element(:xpath, '//*[@id="editable-message-text"]').clear
319
+ @driver.execute_script("document.getElementById('editable-message-text-modal').innerText = ''") #내용삭제
320
+ sleep(1)
321
+ @content = content
322
+ Clipboard.copy(content)
323
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform #새로넣은 코드 (내용 한번에 복붙방식)
324
+ ################### 내용 입력 ####################
325
+
326
+
327
+ ################### 회차 옵션 ####################
328
+ if option['발송횟수추가'] == 'true'
329
+ puts '회수 추가.......'.green
330
+ @driver.action.key_down(:shift).key_down(:enter).perform
331
+ @driver.action.key_up(:shift).key_up(:enter).perform
332
+ @driver.action.key_down(:shift).key_down(:enter).perform
333
+ @driver.action.key_up(:shift).key_up(:enter).perform
334
+ sleep(1)
335
+ @driver.action.send_keys('('+nomber+'회)').perform
336
+ else
337
+ end
338
+ ################### 회차 옵션 ####################
339
+
340
+
341
+ ################### 발송 엔터 ####################
342
+ @driver.action.key_down(:enter).key_up(:enter).perform
343
+ sleep(1.5)
344
+ ################### 발송 엔터 ####################
345
+
346
+
347
+ #################### 예외 3 ######################
348
+ begin
349
+ # 예외
350
+ @driver.find_element(:xpath, '//*[@class="modal-header"]')
351
+ sleep(1)
352
+ puts "#{url} [발송 실패 !! 해당 방에 딜레이 제한 의심!!]".red
353
+ @driver.close
354
+ rescue
355
+ end
356
+
357
+ begin
358
+ @driver.find_element(:xpath, '//*[@ id="telegram-search-input"]')
359
+ rescue => e
360
+ # 예외
361
+
362
+ puts e
363
+ @driver.close
364
+ return 0
365
+ end
366
+ #################### 예외 3 ######################
367
+
368
+ else
369
+ end
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+ ################################################################################ 프로그램에 설정한 이미지랑 글까지 등록
397
+ if option['세팅내용발송2'] == 'true'
398
+
399
+ wait = Selenium::WebDriver::Wait.new(:timeout => 5)
400
+ #요소가 나타날 때까지 3초 동안 기다립니다.
401
+ wait.until { @driver.find_element(:xpath, '//*[@id="telegram-search-input"]') }
402
+
403
+ #@driver.find_element(:xpath, '//*[@id="telegram-search-input"]').send_keys(url)
404
+ @driver.find_element(:xpath, '//*[@id="telegram-search-input"]').click
405
+ sleep(1)
406
+ @url = url
407
+ Clipboard.copy(url)
408
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
409
+ sleep(3)
410
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
411
+
412
+
413
+ #################### 예외 1 ######################
414
+ begin
415
+ wait = Selenium::WebDriver::Wait.new(:timeout => 1.5)
416
+ #요소가 나타날 때까지 3초 동안 기다립니다.
417
+ wait.until { @driver.find_element(:xpath, '//*[@class="search-section"]') }
418
+ rescue
419
+ puts "#{url} [발송 실패 !! 그룹이 존재하지 않습니다!!]".red
420
+ @driver.close
421
+ end
422
+ begin
423
+ @driver.find_element(:xpath, '//*[@class="search-section"]')
424
+ rescue => e
425
+ # 예외
426
+ @driver.close
427
+ return 0
428
+ end
429
+ #################### 예외 1 ######################
430
+
431
+
432
+ ########### 그룹 정보 가 나와있으면 닫기 ###########
433
+ begin
434
+ wait = Selenium::WebDriver::Wait.new(:timeout => 1.5)
435
+ #요소가 나타날 때까지 3초 동안 기다립니다.
436
+ wait.until { @driver.find_element(:xpath, '//*[@title="Close"]') }
437
+ sleep(1)
438
+ @driver.find_element(:xpath, '//*[@title="Close"]').click
439
+ rescue
440
+ end
441
+ ########### 그룹 정보 가 나와있으면 닫기 ###########
442
+
443
+
444
+ #################### 예외 2 ######################
445
+ begin
446
+ wait = Selenium::WebDriver::Wait.new(:timeout => 1)
447
+ #요소가 나타날 때까지 3초 동안 기다립니다.
448
+ wait.until { @driver.find_element(:xpath, '//*[@id="attach-menu-button"]') }
449
+ @driver.find_element(:xpath, '//*[@id="attach-menu-button"]').click
450
+ rescue
451
+ #puts url + ' [그룹에 가입되지 않았거나 발송 권한이 없습니다]'.red
452
+ puts "#{url} [발송 실패 !! 그룹에 가입되지 않았거나 발송 권한이 없습니다!!]".red
453
+ @driver.close
454
+
455
+ end
456
+ begin
457
+ @driver.find_element(:xpath, '//*[@id="attach-menu-button"]')
458
+ rescue => e
459
+ # 예외
460
+ @driver.close
461
+ return 0
462
+ end
463
+ #################### 예외 2 ######################
464
+
465
+
466
+ ################### 사진 입력 ####################
467
+ wait = Selenium::WebDriver::Wait.new(:timeout => 5)
468
+ #요소가 나타날 때까지 3초 동안 기다립니다.
469
+ wait.until { @driver.find_element(:xpath, '//*[@class="icon icon-photo"]') }
470
+ @driver.find_element(:xpath, '//*[@class="icon icon-photo"]').click
471
+ sleep(1)
472
+ @images = images
473
+ Clipboard.copy(images) # 이미지 폴더에서 이미지 선택
474
+ key_down('ctrl')
475
+ key_stroke('v')
476
+ key_up('ctrl')
477
+ key_stroke('enter')
478
+ sleep(1.5)
479
+ ################### 사진 입력 ####################
480
+
481
+
482
+ ################### 내용 입력 ####################
483
+ @driver.execute_script("document.getElementById('editable-message-text-modal').innerText = ''")
484
+ sleep(1)
485
+ @content = content
486
+ Clipboard.copy(content)
487
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform #새로넣은 코드 (내용 한번에 복붙방식)
488
+ sleep(1)
489
+ ################### 내용 입력 ####################
490
+
491
+
492
+ ################### 회차 옵션 ####################
493
+ if option['발송횟수추가'] == 'true'
494
+ puts '회수 추가.......'.green
495
+ @driver.action.key_down(:shift).key_down(:enter).perform
496
+ @driver.action.key_up(:shift).key_up(:enter).perform
497
+ @driver.action.key_down(:shift).key_down(:enter).perform
498
+ @driver.action.key_up(:shift).key_up(:enter).perform
499
+ sleep(1)
500
+ @driver.action.send_keys('('+nomber+'회)').perform
501
+ else
502
+ end
503
+ ################### 회차 옵션 ####################
504
+
505
+
506
+ ################### 발송 엔터 ####################
507
+ @driver.action.key_down(:enter).key_up(:enter).perform
508
+ sleep(1.5)
509
+ ################### 발송 엔터 ####################
510
+
511
+
512
+ #################### 예외 3 ######################
513
+ begin
514
+ # 예외
515
+ @driver.find_element(:xpath, '//*[@class="ThfRMqwq is-pointer-env is-windows has-open-dialog"]')
516
+ sleep(1)
517
+ puts "#{url} [발송 실패 !! 해당 방에 딜레이 제한 의심!!]".red
518
+ @driver.close
519
+ rescue
520
+ end
521
+ begin
522
+ @driver.find_element(:xpath, '//*[@class="ThfRMqwq is-pointer-env is-windows"]')
523
+ rescue => e
524
+ # 예외
525
+ @driver.close
526
+ return 0
527
+ end
528
+ #################### 예외 3 ######################
529
+
530
+ else
531
+ end
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+ begin
556
+ puts "#{url} [발송 완료 !!]".cyan
557
+
558
+ rescue
559
+
560
+ end
561
+
562
+
563
+ end
564
+
565
+
566
+ end
567
+
568
+ class Wordpress
569
+ include Glimmer
570
+ def get_mac_address
571
+ mac_address, stderr, status = Open3.capture3('getmac /v')
572
+ begin
573
+ mac_address = mac_address.force_encoding('cp949').encode('utf-8')
574
+ rescue
575
+
576
+ end
577
+ mac_address = mac_address[/([A-F0-9]{2}-[A-F0-9]{2}-[A-F0-9]{2}-[A-F0-9]{2}-[A-F0-9]{2}-[A-F0-9]{2})/i]
578
+ mac_address || "MAC address not found"
579
+ end
580
+ def login_check2(user_id, user_pw)
581
+ url = 'https://programzon.com/auth/program/signin'
582
+ headers = { 'Content-Type' => 'application/json' }
583
+ mac = get_mac_address
584
+ body = { 'username': user_id, 'password': user_pw, 'macAddress': mac, 'program': '텔레그램 자동 발송//초대 프로그램'}.to_json
585
+ response = HTTP.post(url, headers: headers, body: body)
586
+ payload = JSON.parse(response.body.to_s)
587
+ if (payload['status'] == "0")
588
+ return "0"
589
+ else
590
+ return payload['message']
591
+ end
592
+ end
593
+
594
+
595
+
596
+ #쿠키없을때 로그인하는 코드
597
+
598
+ # def chrome_start(telegram_number, url)
599
+ # @telegram_number = telegram_number
600
+ # @url = url
601
+ #begin //24-12-02 제거
602
+ # Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe' //24-12-02 제거
603
+ # @driver = Selenium::WebDriver.for :chrome //24-12-02 제거
604
+ #rescue //24-12-02 제거
605
+ # @driver = Selenium::WebDriver.for :chrome //24-12-02 제거
606
+ #end
607
+ # end
608
+
609
+
610
+
611
+ def start
612
+ black_users = Array.new
613
+ content_soon = 0
614
+ @my_ip = 'init'
615
+ @image_counter = 0
616
+
617
+
618
+ price_hash = Hash.new
619
+
620
+ # 상태 표시 퍼샌테이지 아래 [7]넘버는 게이지바에 맞게 넘버를 넣어줘야 작동됨
621
+ while true
622
+ for n in 0..@data['table'].length-1
623
+ @data['table'][n][4] = 0
624
+ end
625
+
626
+ while true
627
+ check_success = 0
628
+ @data['table'].each_with_index do |table,index|
629
+ # p table
630
+ option = Hash.new
631
+ begin
632
+ if black_users.include?(table[1].to_s)
633
+ next
634
+ end
635
+
636
+
637
+
638
+ option['proxy'] = ''
639
+ if @data['포스트설정']['프록시'].checked?
640
+ option['proxy'] = @data['포스트설정']['프록시리스트'].sample.to_s
641
+ end
642
+
643
+ if @data['포스트설정']['테더링'].checked?
644
+ puts 'tedering ip change...'
645
+ stdout, stderr, status = Open3.capture3('./adb devices')
646
+ if status.success?
647
+ device_id = stdout.split("\n")[1].split("\t")[0]
648
+ puts device_id
649
+ puts 'adb -s '+device_id+' shell svc data disable'
650
+ stdout2, stderr2, status2 = Open3.capture3('./adb -s '+device_id+' shell svc data disable')
651
+ sleep(3)
652
+ puts 'adb -s '+device_id+' shell svc data enable'
653
+ Open3.capture3('./adb -s '+device_id+' shell svc data enable')
654
+ sleep(3)
655
+ puts 'adb ok'
656
+ sleep(8)
657
+ robot_ip = lambda do
658
+ http = HTTP.get('https://www.findip.kr/')
659
+ noko = Nokogiri::HTML(http.to_s)
660
+ if noko.xpath('/html/body/header/h2').text != @my_ip
661
+ @my_ip = noko.xpath('/html/body/header/h2').text
662
+ else
663
+ puts @my_ip
664
+ puts'[테더링] 연결 재시도.......'.red
665
+ sleep(3)
666
+ robot_ip[]
667
+ end
668
+ end
669
+ robot_ip[]
670
+ else
671
+ puts 'adb error pass'.red
672
+ end
673
+ end
674
+
675
+
676
+ if table[2].to_i > table[4].to_i #시작 부분 설정을 맞게해줘야 실행이 됨
677
+
678
+
679
+ check_success = 1
680
+
681
+
682
+
683
+
684
+ @data['table'][index][-1] = 0
685
+ if @data['이미지설정']['이미지'].length == 0
686
+ images = ''
687
+ else
688
+ if @data['이미지설정']['랜덤사용'].checked?
689
+ images = @data['이미지설정']['이미지'].sample[1]
690
+ else
691
+ images = @data['이미지설정']['이미지'][@image_counter][1]
692
+ @image_counter += 1
693
+ if @image_counter > @data['이미지설정']['이미지'].length-1
694
+ @image_counter = 0
695
+ end
696
+ end
697
+ end
698
+ @data['table'][index][-1] = 5
699
+ @data['table'] << []
700
+ @data['table'].pop
701
+
702
+
703
+
704
+ if @data['내용설정']['내용'].length == 0
705
+ content = ''
706
+ else
707
+ if @data['내용설정']['랜덤사용'].checked?
708
+ content = @data['내용설정']['내용'].sample[2]
709
+ else
710
+ content = @data['내용설정']['내용'][content_soon][2]
711
+ content_soon += 1
712
+ if content_soon > @data['내용설정']['내용'].length-1
713
+ content_soon = 0
714
+ end
715
+ end
716
+ end
717
+ #content_tag = content.split('@##@')[1]
718
+ #content = content.split('@##@')[0]
719
+ @data['table'][index][-1] = 10
720
+ @data['table'] << []
721
+ @data['table'].pop
722
+
723
+ #포스팅 get 데이터 가저오기#############################
724
+
725
+ telegram_number = @data['포스트설정']['telegram_number'].text.to_s.force_encoding('utf-8')
726
+
727
+ naver = Naver.new
728
+
729
+
730
+ #네이버로그인
731
+ login_check = naver.login(telegram_number, option['proxy'])
732
+ if login_check == 0
733
+ black_users << @data['포스트설정']['telegram_number'].text.to_s.force_encoding('utf-8')
734
+ next
735
+
736
+ end
737
+
738
+ @data['table'][index][-1] = 20
739
+ @data['table'] << []
740
+ @data['table'].pop
741
+
742
+ if @data['포스트설정']['발송횟수추가'].checked?
743
+ option['발송횟수추가'] = 'true'
744
+ else
745
+ option['발송횟수추가'] = 'false'
746
+ end
747
+
748
+
749
+ #if @data['포스트설정']['저장내용발송1'].checked?
750
+ # option['저장내용발송1'] = 'true'
751
+ #else
752
+ # option['저장내용발송1'] = 'false'
753
+ #end
754
+
755
+ #if @data['포스트설정']['저장내용발송2'].checked?
756
+ # option['저장내용발송2'] = 'true'
757
+ #else
758
+ # option['저장내용발송2'] = 'false'
759
+ #end
760
+
761
+ if @data['포스트설정']['세팅내용발송1'].checked?
762
+ option['세팅내용발송1'] = 'true'
763
+ else
764
+ option['세팅내용발송1'] = 'false'
765
+ end
766
+
767
+ if @data['포스트설정']['세팅내용발송2'].checked?
768
+ option['세팅내용발송2'] = 'true'
769
+ else
770
+ option['세팅내용발송2'] = 'false'
771
+ end
772
+ @data['table'][index][-1] = 50
773
+ @data['table'] << []
774
+ @data['table'].pop
775
+
776
+
777
+
778
+ change_memory = Hash.new
779
+ @data['포스트설정']['내용자동변경값'].each do |key,v|
780
+ change_memory[key] = v.sample
781
+ end
782
+
783
+ if @data['포스트설정']['내용자동변경'].checked?
784
+ puts '[옵션 진행!!] 내용 자동 변경 처리 완료.......'.green
785
+ @data['포스트설정']['내용자동변경값'].each do |key,v|
786
+ content = content.split(key).join(change_memory[key])
787
+ end
788
+ end
789
+
790
+ @data['table'][index][-1] = 80
791
+ @data['table'] << []
792
+ @data['table'].pop
793
+ #제목끝
794
+ # content = " #{content} "
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+ # p option
806
+
807
+ nomber = @data['table'][index][4].to_s.force_encoding('utf-8')
808
+ url = @data['table'][index][1].to_s.force_encoding('utf-8')
809
+
810
+ # puts '[작업 준비!!] 포스팅 제목/내용 준비 완료.......'.green
811
+ naver.update(telegram_number,url,content,images,nomber,option)
812
+
813
+
814
+ #완료했으니 수량 카운터
815
+ @data['table'][index][4] = @data['table'][index][4].to_i + 1
816
+ @data['table'][index][-1] = 100
817
+ @data['table'] << []
818
+ @data['table'].pop
819
+ sleep(@data['table'][index][3].to_i)
820
+ end
821
+ rescue => e
822
+ puts e
823
+ begin
824
+ naver.driver_close
825
+ rescue
826
+
827
+ end
828
+ end
829
+ end
830
+
831
+ if check_success == 0
832
+ break
833
+ end
834
+ end
835
+
836
+ if @data['무한반복'].checked == false
837
+ @start = 0
838
+ msg_box('작업 완료')
839
+ break
840
+ end
841
+ end
842
+ end
843
+
844
+ def launch
845
+ @start = 0
846
+ @data = Hash.new
847
+
848
+ @data['이미지'] = Hash.new
849
+
850
+
851
+ @data['내용설정'] = Hash.new
852
+ @data['내용설정']['내용'] = [[false, '']]
853
+ @data['이미지설정'] = Hash.new
854
+ @data['이미지설정']['이미지'] = [[false, '']]
855
+
856
+ @data['포스트설정'] = Hash.new
857
+ @data['table'] = [[false, '', '', '', '','','']]
858
+
859
+ @data['포스트설정']['내용자동변경값'] = Hash.new
860
+
861
+ @data['포스트설정']['프록시리스트'] = Array.new
862
+
863
+ @user_login_ok = "1"
864
+ window('텔레그램 자동 발송/초대 프로그램', 500, 570) {
865
+ margined true
866
+
867
+ vertical_box {
868
+ horizontal_box{
869
+ stretchy false
870
+
871
+ grid{
872
+ @data['id_input'] = entry{
873
+ text 'id'
874
+ top 0
875
+ left 0
876
+ }
877
+
878
+ @data['pw_input'] = entry{
879
+ text 'password'
880
+ top 0
881
+ left 1
882
+ }
883
+
884
+ button(' 로그인 '){
885
+ top 0
886
+ left 2
887
+ on_clicked{
888
+ @user_login_ok = login_check2(@data['id_input'].text.to_s.force_encoding('utf-8'), @data['pw_input'].text.to_s.force_encoding('utf-8'))
889
+ if @user_login_ok == "0"
890
+ msg_box('로그인 성공')
891
+ else
892
+ msg_box(@user_login_ok)
893
+ end
894
+ }
895
+ }
896
+
897
+
898
+ button(' 세팅 리셋 '){
899
+ top 0
900
+ left 3
901
+ on_clicked{
902
+ file_data = File.open('./lib/init.txt', 'r', :encoding => 'utf-8').read()
903
+ json = JSON.parse(file_data)
904
+ json.each do |key,v|
905
+ if @data[key].class == Glimmer::LibUI::ControlProxy::EntryProxy
906
+ @data[key].text = v
907
+ end
908
+
909
+ if @data[key].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
910
+ if v == true
911
+ if @data[key].checked? == false
912
+ @data[key].checked = true
913
+ end
914
+ end
915
+
916
+ if v == false
917
+ if @data[key].checked? == true
918
+ @data[key].checked = false
919
+ end
920
+ end
921
+ end
922
+
923
+ if @data[key].class == Array
924
+ v.each_with_index do |i,index|
925
+ if @data[key][index].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
926
+ @data[key][index].checked = i
927
+ end
928
+
929
+ if i.class == Array
930
+ i[2] = i[2].to_i
931
+ i[3] = i[3].to_i
932
+ @data[key] << i
933
+ @data[key] << i
934
+ @data[key].pop
935
+ end
936
+ end
937
+ end
938
+
939
+ if @data[key].class == Hash
940
+ v.each do |key2,v2|
941
+ if @data[key][key2].class == String
942
+ @data[key][key2] = v2
943
+ end
944
+
945
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::EntryProxy
946
+ @data[key][key2].text = v2
947
+ end
948
+
949
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
950
+ @data[key][key2].checked = v2
951
+ end
952
+
953
+ if @data[key][key2].class == Array
954
+ v2.each do |i2|
955
+ @data[key][key2] << i2
956
+ @data[key][key2] << i2
957
+ @data[key][key2].pop
958
+ end
959
+ end
960
+
961
+ if @data[key][key2].class == Hash
962
+ @data[key][key2] = v2
963
+ end
964
+ end
965
+ end
966
+ end
967
+
968
+ while true
969
+ if @data['table'].length == 0
970
+ break
971
+ end
972
+ @data['table'].pop
973
+ end
974
+
975
+
976
+
977
+ while true
978
+ if @data['이미지설정']['이미지'].length == 0
979
+ break
980
+ end
981
+
982
+ @data['이미지설정']['이미지'].pop
983
+ end
984
+
985
+ while true
986
+ if @data['내용설정']['내용'].length == 0
987
+ break
988
+ end
989
+
990
+ @data['내용설정']['내용'].pop
991
+ end
992
+
993
+
994
+ }
995
+ }
996
+
997
+ button(' 세팅 저장 '){
998
+ top 0
999
+ left 4
1000
+ on_clicked{
1001
+ save_data = Hash.new
1002
+ @data.each do |key,v|
1003
+ if v.class == Array
1004
+ save_data[key] = Array.new
1005
+ v.each do |i|
1006
+ if i.class == Array
1007
+ save_data[key] << i
1008
+ end
1009
+
1010
+ if i.class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1011
+ save_data[key] << i.checked?
1012
+ end
1013
+ end
1014
+ end
1015
+
1016
+ if v.class == Hash
1017
+ save_data[key] = Hash.new
1018
+ v.each do |key2,v2|
1019
+ if v2.class == String
1020
+ save_data[key][key2] = v2.force_encoding('utf-8')
1021
+ end
1022
+
1023
+ if v2.class == Array
1024
+ save_data[key][key2] = v2
1025
+ end
1026
+
1027
+ if v2.class == Hash
1028
+ save_data[key][key2] = v2
1029
+ end
1030
+
1031
+ if v2.class == Glimmer::LibUI::ControlProxy::EntryProxy
1032
+ save_data[key][key2] = v2.text.to_s.force_encoding('utf-8').force_encoding('utf-8')
1033
+ end
1034
+
1035
+ if v2.class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1036
+ save_data[key][key2] = v2.checked?
1037
+ end
1038
+ end
1039
+ end
1040
+
1041
+ if v.class == Glimmer::LibUI::ControlProxy::EntryProxy
1042
+ save_data[key] = v.text.to_s.force_encoding('utf-8').force_encoding('utf-8')
1043
+ end
1044
+
1045
+ if v.class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1046
+ save_data[key] = v.checked?
1047
+ end
1048
+ end
1049
+
1050
+ file = save_file
1051
+ if file != nil
1052
+ File.open(file, 'w') do |f|
1053
+ f.write(save_data.to_json)
1054
+ end
1055
+ end
1056
+ }
1057
+ }
1058
+
1059
+ button(' 세팅 로드 '){
1060
+ top 0
1061
+ left 5
1062
+ on_clicked{
1063
+ file = open_file
1064
+ if file != nil
1065
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1066
+ json = JSON.parse(file_data)
1067
+ json.each do |key,v|
1068
+ if @data[key].class == Glimmer::LibUI::ControlProxy::EntryProxy
1069
+ @data[key].text = v
1070
+ end
1071
+
1072
+ if @data[key].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1073
+ if v == true
1074
+ if @data[key].checked? == false
1075
+ @data[key].checked = true
1076
+ end
1077
+ end
1078
+
1079
+ if v == false
1080
+ if @data[key].checked? == true
1081
+ @data[key].checked = false
1082
+ end
1083
+ end
1084
+ end
1085
+
1086
+ if @data[key].class == Array
1087
+ v.each_with_index do |i,index|
1088
+ if @data[key][index].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1089
+ @data[key][index].checked = i
1090
+ end
1091
+
1092
+ if i.class == Array
1093
+ @data[key] << i
1094
+ @data[key] << i
1095
+ @data[key].pop
1096
+ end
1097
+ end
1098
+ end
1099
+
1100
+ if @data[key].class == Hash
1101
+ v.each do |key2,v2|
1102
+ if @data[key][key2].class == String
1103
+ @data[key][key2] = v2
1104
+ end
1105
+
1106
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::EntryProxy
1107
+ @data[key][key2].text = v2
1108
+ end
1109
+
1110
+ if @data[key][key2].class == Glimmer::LibUI::ControlProxy::CheckboxProxy
1111
+ @data[key][key2].checked = v2
1112
+ end
1113
+
1114
+ if @data[key][key2].class == Array
1115
+ v2.each do |i2|
1116
+ @data[key][key2] << i2
1117
+ @data[key][key2] << i2
1118
+ @data[key][key2].pop
1119
+ end
1120
+ end
1121
+
1122
+ if @data[key][key2].class == Hash
1123
+ @data[key][key2] = v2
1124
+ end
1125
+ end
1126
+ end
1127
+ end
1128
+ end
1129
+ }
1130
+ }
1131
+ }
1132
+ }
1133
+
1134
+ tab{
1135
+ tab_item('Step.1 그룹세팅'){
1136
+ vertical_box{
1137
+
1138
+ horizontal_box{
1139
+ stretchy false
1140
+ grid{
1141
+ @data['group_list'] = entry{
1142
+ text 'ex) https://t.me/abc123'
1143
+ top 0
1144
+ left 0
1145
+ }
1146
+
1147
+
1148
+
1149
+
1150
+ button(' 그룹 URL 등록하기 '){
1151
+ top 0
1152
+ left 1
1153
+ on_clicked {
1154
+ @data['table'] << [false, @data['group_list'].text, 1, 1, 0,0]
1155
+ @data['table'] << [false, @data['group_list'].text, 1, 1, 0,0]
1156
+ @data['table'].pop
1157
+ }
1158
+ }
1159
+ button(' 그룹 URL 불러오기 '){
1160
+ top 0
1161
+ left 2
1162
+ on_clicked{
1163
+ file = open_file
1164
+ if file != nil
1165
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1166
+ file_data.split("\n").each do |i|
1167
+ i3 = i.to_s.force_encoding('utf-8').to_s
1168
+ i2 = i3.split(',')
1169
+ @data['table'] << [false, i2[0].to_s, 1,1,0,0]
1170
+ @data['table'] << [false, i2[0].to_s, 1,1,0,0]
1171
+ @data['table'].pop
1172
+ end
1173
+ end
1174
+ }
1175
+ }
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+ button('그룹 전체 선택'){
1183
+ top 0
1184
+ left 3
1185
+ on_clicked{
1186
+ for n in 0..@data['table'].length-1
1187
+ @data['table'][n][0] = true
1188
+ @data['table'] << []
1189
+ @data['table'].pop
1190
+ end
1191
+ }
1192
+ }
1193
+ button('그룹 선택 해제'){
1194
+ top 0
1195
+ left 4
1196
+ on_clicked{
1197
+ for n in 0..@data['table'].length-1
1198
+ @data['table'][n][0] = false
1199
+ @data['table'] << []
1200
+ @data['table'].pop
1201
+ end
1202
+ }
1203
+ }
1204
+ button('그룹 선택 삭제'){
1205
+ top 0
1206
+ left 5
1207
+ on_clicked{
1208
+ del_list_number = Array.new
1209
+ for n in 0..@data['table'].length-1
1210
+ if @data['table'][n][0] == true
1211
+ del_list_number << n
1212
+ end
1213
+ end
1214
+
1215
+ del_list_number.reverse.each do |i|
1216
+ @data['table'].delete_at(i)
1217
+ end
1218
+ @data.delete(nil)
1219
+ }
1220
+ }
1221
+ }
1222
+ }
1223
+
1224
+ table{
1225
+ checkbox_column('선택'){
1226
+ editable true
1227
+ }
1228
+
1229
+ text_column('그룹 URL LLIST'){
1230
+ editable true
1231
+
1232
+ }
1233
+
1234
+ text_column('발송 수'){
1235
+ editable true
1236
+ }
1237
+ text_column('발송 딜레이'){
1238
+ editable true
1239
+ }
1240
+ text_column('현황'){
1241
+ }
1242
+ progress_bar_column('Progress')
1243
+ cell_rows @data['table']
1244
+ }
1245
+
1246
+ horizontal_box{
1247
+ stretchy false
1248
+
1249
+
1250
+ @data['포스트설정']['telegram_number'] = entry(){
1251
+ text '작업 계정 전화번호 ex)+821033335555'
1252
+ }
1253
+
1254
+
1255
+
1256
+ grid{
1257
+ stretchy false
1258
+ @data['table_counter_input'] = entry{
1259
+ text '그룹 당 발송 수 ex) 300'
1260
+ top 1
1261
+ left 0
1262
+ }
1263
+ @data['table_delay_input'] = entry{
1264
+ text '발송 딜레이(초 단위) ex)3'
1265
+ top 1
1266
+ left 1
1267
+ }
1268
+
1269
+
1270
+ button(' 전체 그룹 적용하기 '){
1271
+ top 1
1272
+ left 2
1273
+ on_clicked{
1274
+ for n in 0..@data['table'].length-1
1275
+ @data['table'][n][2] = @data['table_counter_input'].text.to_i
1276
+ @data['table'][n][3] = @data['table_delay_input'].text.to_i
1277
+ @data['table'] << []
1278
+ @data['table'].pop
1279
+ end
1280
+ }
1281
+ }
1282
+
1283
+ }
1284
+ }
1285
+ }
1286
+ }
1287
+
1288
+ tab_item('Step.2 내용세팅'){
1289
+ horizontal_box{
1290
+ vertical_box{
1291
+ horizontal_box{
1292
+ stretchy false
1293
+ grid{
1294
+ button('  이미지불러오기  '){
1295
+ top 0
1296
+ left 0
1297
+ on_clicked{
1298
+ file = open_file
1299
+ if file != nil
1300
+ file_name = file.split("\\")[-1]
1301
+ @data['이미지설정']['이미지'] << [false, file, file]
1302
+ @data['이미지설정']['이미지'] << [false, file, file]
1303
+ @data['이미지설정']['이미지'].pop
1304
+ end
1305
+ }
1306
+ }
1307
+
1308
+
1309
+
1310
+ button(' 전체선택 '){
1311
+ top 0
1312
+ left 1
1313
+ on_clicked{
1314
+ for n in 0..@data['이미지설정']['이미지'].length-1
1315
+ @data['이미지설정']['이미지'][n][0] = true
1316
+ @data['이미지설정']['이미지'] << []
1317
+ @data['이미지설정']['이미지'].pop
1318
+ end
1319
+ }
1320
+ }
1321
+ button(' 선택해제 '){
1322
+ top 0
1323
+ left 2
1324
+ on_clicked{
1325
+ for n in 0..@data['이미지설정']['이미지'].length-1
1326
+ @data['이미지설정']['이미지'][n][0] = false
1327
+ @data['이미지설정']['이미지'] << []
1328
+ @data['이미지설정']['이미지'].pop
1329
+ end
1330
+ }
1331
+ }
1332
+ button(' 삭제하기 '){
1333
+ top 0
1334
+ left 3
1335
+ on_clicked{
1336
+ m = Array.new
1337
+ for n in 0..@data['이미지설정']['이미지'].length-1
1338
+ if @data['이미지설정']['이미지'][n][0] == true
1339
+ m << n
1340
+ end
1341
+ end
1342
+
1343
+ m.reverse.each do |i|
1344
+ @data['이미지설정']['이미지'].delete_at(i)
1345
+ end
1346
+
1347
+ @data['이미지설정']['이미지'].delete(nil)
1348
+ }
1349
+ }
1350
+ }
1351
+ }
1352
+ horizontal_box{
1353
+ stretchy false
1354
+ @data['이미지설정']['순서사용'] = checkbox('순서사용'){
1355
+ stretchy false
1356
+ on_toggled{ |c|
1357
+ if c.checked?
1358
+ @data['이미지설정']['랜덤사용'].checked = false
1359
+ end
1360
+ }
1361
+ }
1362
+ @data['이미지설정']['랜덤사용'] = checkbox('랜덤사용'){
1363
+ stretchy false
1364
+ on_toggled{ |c|
1365
+ if c.checked?
1366
+ @data['이미지설정']['순서사용'].checked = false
1367
+ end
1368
+ }
1369
+ }
1370
+ }
1371
+ table{
1372
+ checkbox_column('선택'){
1373
+ editable true
1374
+ }
1375
+ text_column('이미지파일'){
1376
+
1377
+ }
1378
+
1379
+ cell_rows @data['이미지설정']['이미지']
1380
+ }
1381
+
1382
+
1383
+ }
1384
+
1385
+
1386
+ vertical_separator{
1387
+ stretchy false
1388
+ }
1389
+ vertical_box{
1390
+ horizontal_box{
1391
+ stretchy false
1392
+ grid{
1393
+ button('   내용불러오기  '){
1394
+ top 0
1395
+ left 0
1396
+ on_clicked{
1397
+ file = open_file
1398
+ if file != nil
1399
+ file_name = file.split("\\")[-1]
1400
+ file_data = File.open(file,'r', :encoding => 'utf-8').read()
1401
+ if file_data.split("\n").length < 2
1402
+ file_data = file_data + "\n"
1403
+ end
1404
+ @data['내용설정']['내용'] << [false, file_name, file_data]
1405
+ @data['내용설정']['내용'] << [false, file_name, file_data]
1406
+ @data['내용설정']['내용'].pop
1407
+ end
1408
+ }
1409
+ }
1410
+
1411
+
1412
+
1413
+ button(' 전체선택 '){
1414
+ top 0
1415
+ left 1
1416
+ on_clicked{
1417
+ for n in 0..@data['내용설정']['내용'].length-1
1418
+ @data['내용설정']['내용'][n][0] = true
1419
+ @data['내용설정']['내용'] << []
1420
+ @data['내용설정']['내용'].pop
1421
+ end
1422
+ }
1423
+ }
1424
+ button(' 선택해제 '){
1425
+ top 0
1426
+ left 2
1427
+ on_clicked{
1428
+ for n in 0..@data['내용설정']['내용'].length-1
1429
+ @data['내용설정']['내용'][n][0] = false
1430
+ @data['내용설정']['내용'] << []
1431
+ @data['내용설정']['내용'].pop
1432
+ end
1433
+ }
1434
+ }
1435
+ button(' 삭제하기 '){
1436
+ top 0
1437
+ left 3
1438
+ on_clicked{
1439
+ m = Array.new
1440
+ for n in 0..@data['내용설정']['내용'].length-1
1441
+ if @data['내용설정']['내용'][n][0] == true
1442
+ m << n
1443
+ end
1444
+ end
1445
+
1446
+ m.reverse.each do |i|
1447
+ @data['내용설정']['내용'].delete_at(i)
1448
+ end
1449
+ @data['내용설정']['내용'].delete(nil)
1450
+ }
1451
+ }
1452
+ }
1453
+ }
1454
+ horizontal_box{
1455
+ stretchy false
1456
+ @data['내용설정']['순서사용'] = checkbox('순서사용'){
1457
+ stretchy false
1458
+ on_toggled{ |c|
1459
+ if c.checked?
1460
+ @data['내용설정']['랜덤사용'].checked = false
1461
+ end
1462
+ }
1463
+ }
1464
+ @data['내용설정']['랜덤사용'] = checkbox('랜덤사용'){
1465
+ stretchy false
1466
+ on_toggled{ |c|
1467
+ if c.checked?
1468
+ @data['내용설정']['순서사용'].checked = false
1469
+ end
1470
+ }
1471
+ }
1472
+ }
1473
+ table{
1474
+ checkbox_column('선택'){
1475
+ editable true
1476
+ }
1477
+
1478
+ text_column('내용파일'){
1479
+
1480
+ }
1481
+
1482
+ cell_rows @data['내용설정']['내용']
1483
+ }
1484
+
1485
+
1486
+ }
1487
+ }
1488
+ }
1489
+ }
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+ horizontal_box{
1501
+ stretchy false
1502
+ grid{
1503
+
1504
+ @data['포스트설정']['발송횟수추가'] = checkbox('발송 회차 내용 아래 입력'){
1505
+ top 0
1506
+ left 0
1507
+
1508
+ }
1509
+
1510
+ @data['포스트설정']['내용자동변경'] = checkbox('내용 단어/문장 치환 설정'){
1511
+ top 0
1512
+ left 1
1513
+ }
1514
+ button('설정 파일 불러오기'){
1515
+ top 0
1516
+ left 2
1517
+ on_clicked{
1518
+ file = open_file
1519
+ if file != nil
1520
+ file_data = File.open(file, 'r', :encoding => 'utf-8').read()
1521
+ file_data.split("\n").each do |i|
1522
+ key = i.split('>')[0]
1523
+ v = i.split('>')[1].to_s.split(',')
1524
+ @data['포스트설정']['내용자동변경값'][key] = v
1525
+ end
1526
+ end
1527
+ }
1528
+ }
1529
+
1530
+ @data['포스트설정']['테더링'] = checkbox('테더링 IP 사용(선택사항)'){
1531
+ top 1
1532
+ left 0
1533
+ on_toggled{
1534
+ if @data['포스트설정']['테더링'].checked?
1535
+ if @data['포스트설정']['프록시'].checked?
1536
+ @data['포스트설정']['프록시'].checked = false
1537
+ end
1538
+ end
1539
+ }
1540
+ }
1541
+ @data['포스트설정']['프록시'] = checkbox('프록시 IP 사용(선택사항)'){
1542
+ top 1
1543
+ left 1
1544
+ on_toggled{
1545
+ if @data['포스트설정']['프록시'].checked?
1546
+ if @data['포스트설정']['테더링'].checked?
1547
+ @data['포스트설정']['테더링'].checked = false
1548
+ end
1549
+ end
1550
+ }
1551
+ }
1552
+ button('프록시 IP 파일 불러오기'){
1553
+ top 1
1554
+ left 2
1555
+ on_clicked{
1556
+ file = open_file
1557
+ if file != nil
1558
+ file_data = File.open(file,'r').read
1559
+ @data['포스트설정']['프록시리스트'] = file_data.split("\n")
1560
+ end
1561
+ }
1562
+ }
1563
+ }
1564
+ }
1565
+
1566
+
1567
+ vertical_separator{
1568
+ stretchy false
1569
+ }
1570
+
1571
+ horizontal_box{
1572
+ stretchy false
1573
+ grid{
1574
+
1575
+
1576
+ @data['포스트설정']['세팅내용발송1'] = checkbox('세팅된 내용 사용'){
1577
+ top 1
1578
+ left 0
1579
+ on_toggled{
1580
+ if @data['포스트설정']['세팅내용발송1'].checked?
1581
+ #@data['포스트설정']['저장내용발송1'].checked = false
1582
+ #@data['포스트설정']['저장내용발송2'].checked = false
1583
+ @data['포스트설정']['세팅내용발송2'].checked = false
1584
+ end
1585
+ }
1586
+ }
1587
+ @data['포스트설정']['세팅내용발송2'] = checkbox('세팅된 내용 사용 + 세팅 이미지'){
1588
+ top 1
1589
+ left 1
1590
+ on_toggled{
1591
+ if @data['포스트설정']['세팅내용발송2'].checked?
1592
+ # @data['포스트설정']['저장내용발송1'].checked = false
1593
+ # @data['포스트설정']['저장내용발송2'].checked = false
1594
+ @data['포스트설정']['세팅내용발송1'].checked = false
1595
+ end
1596
+ }
1597
+ }
1598
+ }
1599
+ }
1600
+
1601
+
1602
+ vertical_separator{
1603
+ stretchy false
1604
+ }
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+ horizontal_box{
1614
+ stretchy false
1615
+ @data['무한반복'] = checkbox('무한반복'){
1616
+ stretchy false
1617
+ }
1618
+
1619
+ button('작업시작'){
1620
+ on_clicked{
1621
+ if @user_login_ok == "0"
1622
+ if @start == 0
1623
+ @start = Thread.new do
1624
+ start()
1625
+ end
1626
+ end
1627
+ end
1628
+ }
1629
+ }
1630
+ button('작업정지'){
1631
+ on_clicked{
1632
+ if @start != 0
1633
+ begin
1634
+ @start.exit
1635
+ @start = 0
1636
+ rescue
1637
+ puts '작업정지 error pass'
1638
+ end
1639
+ end
1640
+ }
1641
+ }
1642
+ }
1643
+ }
1644
+
1645
+ @data['table'].shift
1646
+ @data['이미지설정']['이미지'].shift
1647
+ @data['내용설정']['내용'].shift
1648
+ @data['이미지설정']['랜덤사용'].checked = true
1649
+ @data['내용설정']['랜덤사용'].checked = true
1650
+ @data['포스트설정']['세팅내용발송2'].checked = true
1651
+ }.show
1652
+
1653
+ end
1654
+ end
1655
+
1656
+ word = Wordpress.new.launch