nblog_duo 111.119.999 → 111.120.001
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.
- checksums.yaml +4 -4
- data/lib/nblog_duo.rb +168 -79
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efa881c404a2b73abfcf72dec471351cad68e8b32d673f618b97e12a7b5576f8
|
4
|
+
data.tar.gz: 25843ebb12c59f00fa36bba1e70bdbe670503e67b8a2d31334c8b68ec00c8b18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33818d85d4c36faf98aa79ca8a3d9182dc869e70305b02e95a608ff146a9e4a0c643c2bad6d599e939e5b3d2d2cfecf4408d345139af38f8714a550f9b42c44e
|
7
|
+
data.tar.gz: 81e22e9e1a697c2420156095106263740b5f0ef8fae1e42255fa824791a396fb457d6c11e9c9c7ff036084337b5308f1583e0a78db4a6b37a33539255d9d9922
|
data/lib/nblog_duo.rb
CHANGED
@@ -22,15 +22,15 @@ require 'httpclient'
|
|
22
22
|
include AutoClickMethods
|
23
23
|
using Rainbow
|
24
24
|
include Glimmer
|
25
|
-
|
26
25
|
class Chat
|
27
|
-
def initialize(api_key, gpt_keyword_prompt)
|
26
|
+
def initialize(api_key, gpt_keyword_prompt, model)
|
28
27
|
@api_key = api_key
|
29
28
|
@gpt_keyword_prompt = gpt_keyword_prompt
|
29
|
+
@model = model # 모델을 인자로 받도록 수정
|
30
30
|
end
|
31
31
|
|
32
32
|
def message(keyword)
|
33
|
-
puts 'Sending request to GPT...(키워드 기반 글 생성 중...)'
|
33
|
+
puts 'Sending request to GPT...(키워드 기반 글 생성 중...)'.cyan
|
34
34
|
|
35
35
|
# "키워드 기반 글 생성 중..." 메시지 출력 스레드
|
36
36
|
thread = Thread.new do
|
@@ -54,7 +54,7 @@ class Chat
|
|
54
54
|
|
55
55
|
# 요청 데이터 설정
|
56
56
|
data = {
|
57
|
-
'model' =>
|
57
|
+
'model' => @model,
|
58
58
|
'messages' => [
|
59
59
|
{
|
60
60
|
"role" => "assistant",
|
@@ -64,9 +64,10 @@ class Chat
|
|
64
64
|
'max_tokens' => max_response_tokens # 최대 응답 토큰 설정
|
65
65
|
}
|
66
66
|
|
67
|
-
|
68
|
-
|
69
67
|
answer = ''
|
68
|
+
retry_count = 0
|
69
|
+
max_retries = 5 # 최대 재시도 횟수
|
70
|
+
|
70
71
|
begin
|
71
72
|
req = HTTP.headers(headers).post(url, :json => data)
|
72
73
|
|
@@ -77,7 +78,6 @@ class Chat
|
|
77
78
|
|
78
79
|
# 응답 내용 출력 (디버깅용)
|
79
80
|
response = JSON.parse(req.to_s)
|
80
|
-
|
81
81
|
|
82
82
|
# 응답 데이터에서 안전하게 값 추출
|
83
83
|
if response['choices'] && response['choices'][0] && response['choices'][0]['message']
|
@@ -88,14 +88,21 @@ class Chat
|
|
88
88
|
rescue => e
|
89
89
|
# 오류 메시지 출력
|
90
90
|
puts "Error occurred: #{e.message}"
|
91
|
-
|
91
|
+
if e.message.include?('502') && retry_count < max_retries
|
92
|
+
retry_count += 1
|
93
|
+
puts "Retrying... Attempt ##{retry_count}"
|
94
|
+
sleep(5) # 잠시 대기 후 재시도
|
95
|
+
retry
|
96
|
+
else
|
97
|
+
answer = "오류가 발생했습니다."
|
98
|
+
end
|
92
99
|
end
|
93
100
|
|
94
101
|
# "생성 중..." 메시지 출력 종료
|
95
102
|
thread.kill
|
96
103
|
|
97
104
|
# 결과 로그 출력
|
98
|
-
puts "Final API response ==> #{answer}"
|
105
|
+
puts "Final API response ==> #{answer}".cyan
|
99
106
|
return answer
|
100
107
|
end
|
101
108
|
|
@@ -108,16 +115,16 @@ end
|
|
108
115
|
|
109
116
|
|
110
117
|
|
111
|
-
|
112
|
-
|
113
118
|
class Chat_title
|
114
|
-
def initialize(api_key, gpt_title_prompt)
|
119
|
+
def initialize(api_key, gpt_title_prompt, model)
|
115
120
|
@api_key = api_key
|
116
121
|
@gpt_title_prompt = gpt_title_prompt
|
122
|
+
@model = model # 모델을 인자로 받도록 수정
|
117
123
|
end
|
118
124
|
|
119
125
|
def message(title)
|
120
|
-
puts 'Sending request to GPT...(제목 생성 중...)'
|
126
|
+
puts 'Sending request to GPT...(제목 생성 중...)'.cyan
|
127
|
+
|
121
128
|
# "키워드 기반 글 생성 중..." 메시지를 별도 스레드로 처리
|
122
129
|
thread = Thread.new do
|
123
130
|
while true
|
@@ -125,13 +132,15 @@ class Chat_title
|
|
125
132
|
sleep(3)
|
126
133
|
end
|
127
134
|
end
|
135
|
+
|
128
136
|
url = 'https://api.openai.com/v1/chat/completions'
|
129
137
|
headers = {
|
130
138
|
'Content-Type' => 'application/json',
|
131
139
|
'Authorization' => 'Bearer ' + @api_key
|
132
140
|
}
|
141
|
+
|
133
142
|
data = {
|
134
|
-
'model' =>
|
143
|
+
'model' => @model,
|
135
144
|
'messages' => [{
|
136
145
|
"role" => "system",
|
137
146
|
"content" => "너는 매우 친절하고 성의 있게 답변하는 AI 어시스턴트야."
|
@@ -142,11 +151,14 @@ class Chat_title
|
|
142
151
|
}]
|
143
152
|
}
|
144
153
|
|
154
|
+
answer = ''
|
155
|
+
retry_count = 0
|
156
|
+
max_retries = 5 # 최대 재시도 횟수
|
157
|
+
|
145
158
|
begin
|
146
159
|
req = HTTP.headers(headers).post(url, json: data)
|
147
160
|
|
148
161
|
response = JSON.parse(req.body.to_s)
|
149
|
-
|
150
162
|
|
151
163
|
if req.status == 429
|
152
164
|
return "API 요청 제한을 초과했습니다. 플랜 및 할당량을 확인하세요."
|
@@ -161,28 +173,37 @@ class Chat_title
|
|
161
173
|
answer ||= title # 응답이 없을 경우 기본 메시지 설정
|
162
174
|
rescue => e
|
163
175
|
puts "Error: #{e.message}"
|
164
|
-
|
176
|
+
if e.message.include?('502') && retry_count < max_retries
|
177
|
+
retry_count += 1
|
178
|
+
puts "Retrying... Attempt ##{retry_count}"
|
179
|
+
sleep(5) # 잠시 대기 후 재시도
|
180
|
+
retry
|
181
|
+
else
|
182
|
+
answer = "오류가 발생했습니다."
|
183
|
+
end
|
165
184
|
end
|
166
185
|
|
167
186
|
# "생성 중..." 메시지 출력 종료
|
168
187
|
thread.kill
|
169
188
|
|
170
|
-
puts 'API return ==> '
|
171
|
-
puts answer
|
189
|
+
puts 'API return ==> '.cyan
|
190
|
+
puts answer.cyan
|
172
191
|
answer
|
173
192
|
end
|
174
193
|
end
|
175
194
|
|
176
195
|
|
177
196
|
class Chat_content
|
178
|
-
def initialize(api_key, gpt_content_prompt)
|
197
|
+
def initialize(api_key, gpt_content_prompt, model)
|
179
198
|
@api_key = api_key
|
180
199
|
@gpt_content_prompt = gpt_content_prompt
|
200
|
+
@model = model # 모델을 인자로 받도록 수정
|
181
201
|
end
|
182
202
|
|
183
203
|
def message(content)
|
184
|
-
puts '주의:GPT 특성상 원고 길이가 공백 포함 4천자를 넘기면 오류가 발생할 수 있습니다.'
|
185
|
-
puts 'Sending request to GPT...(내용 변형 중...)'
|
204
|
+
puts '주의:GPT 특성상 원고 길이가 공백 포함 4천자를 넘기면 오류가 발생할 수 있습니다.'.cyan
|
205
|
+
puts 'Sending request to GPT...(내용 변형 중...)'.cyan
|
206
|
+
|
186
207
|
# "키워드 기반 글 생성 중..." 메시지를 별도 스레드로 처리
|
187
208
|
thread = Thread.new do
|
188
209
|
while true
|
@@ -190,14 +211,15 @@ class Chat_content
|
|
190
211
|
sleep(3)
|
191
212
|
end
|
192
213
|
end
|
193
|
-
|
214
|
+
|
194
215
|
url = 'https://api.openai.com/v1/chat/completions'
|
195
216
|
headers = {
|
196
217
|
'Content-Type' => 'application/json',
|
197
218
|
'Authorization' => 'Bearer ' + @api_key
|
198
219
|
}
|
220
|
+
|
199
221
|
data = {
|
200
|
-
'model' =>
|
222
|
+
'model' => @model,
|
201
223
|
'messages' => [{
|
202
224
|
"role" => "system",
|
203
225
|
"content" => "너는 매우 친절하고 성의 있게 답변하는 AI 어시스턴트야."
|
@@ -205,16 +227,18 @@ class Chat_content
|
|
205
227
|
{
|
206
228
|
"role" => "user",
|
207
229
|
"content" => "#{@gpt_content_prompt}\n#{content}"
|
208
|
-
|
209
230
|
}]
|
210
231
|
}
|
211
232
|
|
233
|
+
answer = ''
|
234
|
+
retry_count = 0
|
235
|
+
max_retries = 5 # 최대 재시도 횟수
|
236
|
+
|
212
237
|
begin
|
213
238
|
req = HTTP.headers(headers).post(url, json: data)
|
214
239
|
|
215
240
|
response = JSON.parse(req.body.to_s)
|
216
|
-
|
217
|
-
|
241
|
+
|
218
242
|
if req.status == 429
|
219
243
|
return "API 요청 제한을 초과했습니다. 플랜 및 할당량을 확인하세요."
|
220
244
|
end
|
@@ -224,20 +248,28 @@ class Chat_content
|
|
224
248
|
answer ||= (content) # 응답이 없을 경우 기본 메시지 설정
|
225
249
|
rescue => e
|
226
250
|
puts "Error: #{e.message}"
|
227
|
-
|
251
|
+
if e.message.include?('502') && retry_count < max_retries
|
252
|
+
retry_count += 1
|
253
|
+
puts "Retrying... Attempt ##{retry_count}"
|
254
|
+
sleep(5) # 잠시 대기 후 재시도
|
255
|
+
retry
|
256
|
+
else
|
257
|
+
answer = "오류가 발생했습니다."
|
258
|
+
end
|
228
259
|
end
|
229
260
|
|
230
261
|
# "생성 중..." 메시지 출력 종료
|
231
262
|
thread.kill
|
232
263
|
|
233
|
-
puts 'API return ==> '
|
234
|
-
puts answer
|
264
|
+
puts 'API return ==> '.cyan
|
265
|
+
puts answer.cyan
|
235
266
|
answer
|
236
267
|
end
|
237
268
|
end
|
238
269
|
|
239
270
|
|
240
271
|
|
272
|
+
|
241
273
|
#############################################gpt############################################
|
242
274
|
|
243
275
|
class Naver
|
@@ -2796,6 +2828,19 @@ class Wordpress
|
|
2796
2828
|
end
|
2797
2829
|
end
|
2798
2830
|
|
2831
|
+
if @data['포스트설정']['gpt35'].checked? || @data['포스트설정']['gpt4turbo'].checked? || @data['포스트설정']['gpt4'].checked?
|
2832
|
+
gpt_model = if @data['포스트설정']['gpt35'].checked?
|
2833
|
+
'gpt-3.5-turbo'
|
2834
|
+
elsif @data['포스트설정']['gpt4turbo'].checked?
|
2835
|
+
'gpt-4-turbo'
|
2836
|
+
elsif @data['포스트설정']['gpt4'].checked?
|
2837
|
+
'gpt-4'
|
2838
|
+
end
|
2839
|
+
puts "선택 된 GPT model: #{gpt_model}".green
|
2840
|
+
else
|
2841
|
+
|
2842
|
+
end
|
2843
|
+
|
2799
2844
|
if @data['포스트설정']['gpt제목'].checked?
|
2800
2845
|
gpt_title_prompt = @data['포스트설정']['gpt제목_프롬프트'].text.to_s.force_encoding('utf-8')
|
2801
2846
|
|
@@ -2803,7 +2848,7 @@ class Wordpress
|
|
2803
2848
|
gpt_title_prompt_sample = gpt_title_prompt.strip.empty? ? "프롬프트: 문장을 비슷한 길이로 ChatGPT의 멘트는 빼고 표현을 더 추가해서 하나만 만들어줘." : gpt_title_prompt
|
2804
2849
|
|
2805
2850
|
# gpt_title_prompt_sample을 Chat_title 객체에 전달
|
2806
|
-
chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'), gpt_title_prompt_sample)
|
2851
|
+
chat = Chat_title.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'), gpt_title_prompt_sample, gpt_model)
|
2807
2852
|
|
2808
2853
|
# 메시지 요청 후 title에 저장
|
2809
2854
|
gpt_text1 = chat.message(title)
|
@@ -2859,7 +2904,7 @@ class Wordpress
|
|
2859
2904
|
gpt_content_prompt_sample = gpt_content_prompt.strip.empty? ? "프롬프트:ChatGPT의 멘트는 빼고 위 전체적인 내용의 형식을 똑같이 표현을 더 추가하고 유사어로 변경하여 하나 만들어줘! 전화번호,연락처,가격,홈페이지안내 ,상담안내 관련 문구는 유지해야해" : gpt_content_prompt
|
2860
2905
|
|
2861
2906
|
# Chat_content 객체 생성 시 api_key와 gpt_content_prompt_sample을 두 개의 인자로 전달
|
2862
|
-
chat = Chat_content.new(api_key, gpt_content_prompt_sample)
|
2907
|
+
chat = Chat_content.new(api_key, gpt_content_prompt_sample, gpt_model)
|
2863
2908
|
|
2864
2909
|
# 메시지 요청 후 content에 저장
|
2865
2910
|
gpt_text3 = chat.message(content)
|
@@ -3007,7 +3052,7 @@ class Wordpress
|
|
3007
3052
|
if @data['포스트설정']['gpt키워드'].checked?
|
3008
3053
|
gpt_keyword_prompt = @data['포스트설정']['gpt키워드_프롬프트'].text.to_s.force_encoding('utf-8')
|
3009
3054
|
gpt_keyword_prompt_sample = gpt_keyword_prompt.strip.empty? ? "프롬프트: 관련된 글을 1500자에서 2500자 사이로 만들어줘" : gpt_keyword_prompt
|
3010
|
-
chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'), gpt_keyword_prompt)
|
3055
|
+
chat = Chat.new(@data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8'), gpt_keyword_prompt, gpt_model)
|
3011
3056
|
gpt_text = chat.message(keyword)
|
3012
3057
|
#content = content.to_s + "\n(자동생성글)\n" + gpt_text.to_s
|
3013
3058
|
content = content.to_s + "(자동생성글)" + gpt_text.to_s
|
@@ -4969,7 +5014,11 @@ class Wordpress
|
|
4969
5014
|
vertical_box{
|
4970
5015
|
horizontal_box{
|
4971
5016
|
stretchy false
|
4972
|
-
|
5017
|
+
grid{
|
5018
|
+
stretchy false
|
5019
|
+
@data['image_type'][0] = checkbox('저장 사진 사용 '){
|
5020
|
+
top 0
|
5021
|
+
left 0
|
4973
5022
|
on_toggled{
|
4974
5023
|
if @data['image_type'][0].checked?
|
4975
5024
|
@data['image_type'][1].checked = false
|
@@ -4977,7 +5026,9 @@ class Wordpress
|
|
4977
5026
|
end
|
4978
5027
|
}
|
4979
5028
|
}
|
4980
|
-
@data['image_type'][1] = checkbox('색상 사진 사용'){
|
5029
|
+
@data['image_type'][1] = checkbox('색상 사진 사용 '){
|
5030
|
+
top 0
|
5031
|
+
left 1
|
4981
5032
|
on_toggled{
|
4982
5033
|
if @data['image_type'][1].checked?
|
4983
5034
|
@data['image_type'][0].checked = false
|
@@ -4986,6 +5037,8 @@ class Wordpress
|
|
4986
5037
|
}
|
4987
5038
|
}
|
4988
5039
|
@data['image_type'][2] = checkbox('자동 다운로드 사진 사용'){
|
5040
|
+
top 0
|
5041
|
+
left 2
|
4989
5042
|
on_toggled{
|
4990
5043
|
if @data['image_type'][2].checked?
|
4991
5044
|
@data['image_type'][1].checked = false
|
@@ -4994,7 +5047,7 @@ class Wordpress
|
|
4994
5047
|
}
|
4995
5048
|
}
|
4996
5049
|
}
|
4997
|
-
|
5050
|
+
}
|
4998
5051
|
grid{
|
4999
5052
|
stretchy false
|
5000
5053
|
@data['이미지설정']['글자삽입1'] = checkbox('글자 삽입1'){
|
@@ -5072,8 +5125,12 @@ class Wordpress
|
|
5072
5125
|
top 1
|
5073
5126
|
left 6
|
5074
5127
|
}
|
5075
|
-
|
5076
|
-
|
5128
|
+
}
|
5129
|
+
|
5130
|
+
grid{
|
5131
|
+
stretchy false
|
5132
|
+
@data['이미지설정']['글자순서'] = checkbox('글자 리스트 순서 사용 '){
|
5133
|
+
top 1
|
5077
5134
|
left 0
|
5078
5135
|
on_toggled{
|
5079
5136
|
if @data['이미지설정']['글자순서'].checked?
|
@@ -5082,8 +5139,8 @@ class Wordpress
|
|
5082
5139
|
}
|
5083
5140
|
}
|
5084
5141
|
|
5085
|
-
@data['이미지설정']['글자랜덤'] = checkbox('글자 리스트
|
5086
|
-
top
|
5142
|
+
@data['이미지설정']['글자랜덤'] = checkbox('글자 리스트 랜덤 사용'){
|
5143
|
+
top 1
|
5087
5144
|
left 1
|
5088
5145
|
on_toggled{
|
5089
5146
|
if @data['이미지설정']['글자랜덤'].checked?
|
@@ -5091,32 +5148,38 @@ class Wordpress
|
|
5091
5148
|
end
|
5092
5149
|
}
|
5093
5150
|
}
|
5151
|
+
}
|
5094
5152
|
|
5095
5153
|
|
5096
|
-
|
5097
|
-
|
5098
|
-
|
5154
|
+
grid{
|
5155
|
+
stretchy false
|
5156
|
+
@data['이미지설정']['필터사용'] = checkbox('사진 필터 사용 [흑백,흐림,가우시안,,,등 랜덤] (※색상 사진 사용시 적용 불가)'){
|
5157
|
+
top 0
|
5158
|
+
left 0
|
5099
5159
|
}
|
5100
|
-
|
5101
|
-
|
5160
|
+
}
|
5161
|
+
grid{
|
5162
|
+
stretchy false
|
5163
|
+
@data['이미지설정']['테두리사용'] = checkbox('사진 테두리 적용하기 '){
|
5164
|
+
top 1
|
5102
5165
|
left 0
|
5103
5166
|
}
|
5104
5167
|
@data['이미지설정']['테두리크기1'] = entry{
|
5105
|
-
top
|
5168
|
+
top 1
|
5106
5169
|
left 2
|
5107
5170
|
text 'ex) 1'
|
5108
5171
|
}
|
5109
|
-
label('
|
5110
|
-
top
|
5172
|
+
label('px'){
|
5173
|
+
top 1
|
5111
5174
|
left 3
|
5112
5175
|
}
|
5113
5176
|
@data['이미지설정']['테두리크기2'] = entry{
|
5114
|
-
top
|
5177
|
+
top 1
|
5115
5178
|
left 4
|
5116
5179
|
text 'ex) 33'
|
5117
5180
|
}
|
5118
|
-
label('
|
5119
|
-
top
|
5181
|
+
label('px'){
|
5182
|
+
top 1
|
5120
5183
|
left 5
|
5121
5184
|
}
|
5122
5185
|
|
@@ -5275,7 +5338,7 @@ class Wordpress
|
|
5275
5338
|
stretchy false
|
5276
5339
|
grid{
|
5277
5340
|
stretchy false
|
5278
|
-
@data['포스트설정']['제목키워드변경'] = checkbox('제목에 특정 단어를
|
5341
|
+
@data['포스트설정']['제목키워드변경'] = checkbox('제목에 특정 단어를 키워드로 변경'){
|
5279
5342
|
top 0
|
5280
5343
|
left 0
|
5281
5344
|
|
@@ -5318,13 +5381,10 @@ class Wordpress
|
|
5318
5381
|
left 3
|
5319
5382
|
text '최대수량'
|
5320
5383
|
}
|
5321
|
-
|
5322
|
-
|
5323
|
-
left 2
|
5324
|
-
}
|
5325
|
-
@data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입 제목 앞'){
|
5384
|
+
|
5385
|
+
@data['포스트설정']['제목앞'] = checkbox('제목에 키워드 삽입시 제목 앞에 붙이기'){
|
5326
5386
|
top 3
|
5327
|
-
left
|
5387
|
+
left 0
|
5328
5388
|
enabled false # 기본적으로 비활성화
|
5329
5389
|
on_toggled{
|
5330
5390
|
if @data['포스트설정']['제목앞'].checked? == true
|
@@ -5334,13 +5394,10 @@ class Wordpress
|
|
5334
5394
|
end
|
5335
5395
|
}
|
5336
5396
|
}
|
5337
|
-
|
5338
|
-
|
5339
|
-
|
5340
|
-
|
5341
|
-
@data['포스트설정']['제목뒤'] = checkbox('제목에 키워드 삽입 제목 뒤'){
|
5342
|
-
top 4
|
5343
|
-
left 3
|
5397
|
+
|
5398
|
+
@data['포스트설정']['제목뒤'] = checkbox('제목에 키워드시 삽입 제목 뒤에 붙이기'){
|
5399
|
+
top 3
|
5400
|
+
left 1
|
5344
5401
|
enabled false # 기본적으로 비활성화
|
5345
5402
|
on_toggled{
|
5346
5403
|
if @data['포스트설정']['제목뒤'].checked? == true
|
@@ -5554,34 +5611,65 @@ class Wordpress
|
|
5554
5611
|
text 'URL'
|
5555
5612
|
}
|
5556
5613
|
|
5557
|
-
@data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기'){
|
5558
|
-
top 15+ aa1
|
5559
|
-
left 0
|
5560
|
-
}
|
5561
|
-
|
5562
|
-
@data['포스트설정']['api_key'] = entry(){
|
5563
|
-
top 15+ aa1
|
5564
|
-
left 1
|
5565
|
-
text 'api key 입력 필수!!'
|
5566
|
-
}
|
5567
|
-
|
5568
5614
|
@data['포스트설정']['클립적용'] = checkbox('클립 내용에 넣기'){
|
5569
|
-
top
|
5615
|
+
top 15+ aa1
|
5570
5616
|
left 0
|
5571
5617
|
}
|
5572
5618
|
|
5573
5619
|
@data['포스트설정']['클립단어'] = entry(){
|
5574
|
-
top
|
5620
|
+
top 15+ aa1
|
5575
5621
|
left 1
|
5576
5622
|
text '특정단어'
|
5577
5623
|
}
|
5578
5624
|
@data['포스트설정']['클립넘버'] = entry(){
|
5579
|
-
top
|
5625
|
+
top 15+ aa1
|
5580
5626
|
left 3
|
5581
5627
|
text '클립넘버 ex)1,2,3'
|
5582
5628
|
}
|
5583
|
-
|
5584
5629
|
}
|
5630
|
+
grid{
|
5631
|
+
stretchy false
|
5632
|
+
@data['포스트설정']['ChatGPT사용'] = checkbox('Chat GPT 사용하기 '){
|
5633
|
+
top 1
|
5634
|
+
left 0
|
5635
|
+
}
|
5636
|
+
|
5637
|
+
@data['포스트설정']['api_key'] = entry(){
|
5638
|
+
top 1
|
5639
|
+
left 1
|
5640
|
+
text 'api key 입력'
|
5641
|
+
}
|
5642
|
+
@data['포스트설정']['gpt35'] = checkbox('GPT 3.5-turbo'){
|
5643
|
+
top 1
|
5644
|
+
left 2
|
5645
|
+
on_toggled {
|
5646
|
+
if @data['포스트설정']['gpt35'].checked?
|
5647
|
+
@data['포스트설정']['gpt4'].checked = false
|
5648
|
+
@data['포스트설정']['gpt4turbo'].checked = false
|
5649
|
+
end
|
5650
|
+
}
|
5651
|
+
}
|
5652
|
+
@data['포스트설정']['gpt4'] = checkbox('GPT 4'){
|
5653
|
+
top 1
|
5654
|
+
left 3
|
5655
|
+
on_toggled {
|
5656
|
+
if @data['포스트설정']['gpt4'].checked?
|
5657
|
+
@data['포스트설정']['gpt35'].checked = false
|
5658
|
+
@data['포스트설정']['gpt4turbo'].checked = false
|
5659
|
+
end
|
5660
|
+
}
|
5661
|
+
}
|
5662
|
+
@data['포스트설정']['gpt4turbo'] = checkbox('GPT 4-turbo'){
|
5663
|
+
top 1
|
5664
|
+
left 4
|
5665
|
+
on_toggled {
|
5666
|
+
if @data['포스트설정']['gpt4turbo'].checked?
|
5667
|
+
@data['포스트설정']['gpt35'].checked = false
|
5668
|
+
@data['포스트설정']['gpt4'].checked = false
|
5669
|
+
end
|
5670
|
+
}
|
5671
|
+
}
|
5672
|
+
}
|
5585
5673
|
}
|
5586
5674
|
|
5587
5675
|
vertical_separator{
|
@@ -6121,6 +6209,7 @@ class Wordpress
|
|
6121
6209
|
@data['포스트설정']['발행기능'].checked = true
|
6122
6210
|
@data['포스트설정']['인용구랜덤'].checked = true
|
6123
6211
|
@data['이미지설정']['글자순서'].checked = true
|
6212
|
+
@data['포스트설정']['gpt35'].checked = true
|
6124
6213
|
}.show
|
6125
6214
|
end
|
6126
6215
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nblog_duo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 111.
|
4
|
+
version: 111.120.001
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zon
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-06-
|
10
|
+
date: 2025-06-26 00:00:00.000000000 Z
|
11
11
|
dependencies: []
|
12
12
|
description: File to Clipboard gem
|
13
13
|
email: mymin26@naver.com
|