質問編集履歴

3

新規エラーの発生

2020/04/16 16:22

投稿

Yuta_for
Yuta_for

スコア21

test CHANGED
File without changes
test CHANGED
@@ -381,3 +381,77 @@
381
381
  IRCクラス内の属性だと思ったのですが、この辺の仕組みがよく理解できていないように思います。
382
382
 
383
383
  エラーの原因がわかりましたらご教授お願いいたします。
384
+
385
+
386
+
387
+ 2020/4/17追記
388
+
389
+ ```Python
390
+
391
+ /home/yuta/Desktop/work/python/PycharmProjects/TestPJ/venv/bin/python /home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/bot.py
392
+
393
+ connecting to:irc.freenode.net
394
+
395
+ b':barjavel.freenode.net NOTICE * :*** Looking up your hostname...\r\n'
396
+
397
+ Traceback (most recent call last):
398
+
399
+ File "/home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/bot.py", line 16, in <module>
400
+
401
+ if "PRIVMSG " in text and channel in text and "hello" in text:
402
+
403
+ TypeError: a bytes-like object is required, not 'str'
404
+
405
+
406
+
407
+ Process finished with exit code 1
408
+
409
+ ```
410
+
411
+
412
+
413
+ ```bot
414
+
415
+ from irc import *
416
+
417
+ import os
418
+
419
+ import random
420
+
421
+
422
+
423
+ channel = "#testit"
424
+
425
+ server = "irc.freenode.net"
426
+
427
+ botnick = "reddity"
428
+
429
+
430
+
431
+ irc = IRC()
432
+
433
+ irc.connect(server, channel, botnick)
434
+
435
+
436
+
437
+ while 1:
438
+
439
+ text = irc.get_text()
440
+
441
+ print(text)
442
+
443
+
444
+
445
+ if "PRIVMSG " in text and channel in text and "hello" in text:
446
+
447
+ irc.send(channel, "HEllo!")
448
+
449
+ ```
450
+
451
+ 呼び出す側のbotで型エラーがおきました。
452
+
453
+
454
+
455
+ strをbyteに直す必要がありますが、どこを指しているのか不明です。
456
+
457
+ 自分では全然検討もつかなくものすごく申し訳ないですが、わかる人がいましたらご教授お願いいたします。

2

指摘を基にして修正を行った。

2020/04/16 16:22

投稿

Yuta_for
Yuta_for

スコア21

test CHANGED
File without changes
test CHANGED
@@ -277,3 +277,107 @@
277
277
  irc.pyの該当属性を入れ子にしてタブをずらしたことで属性を見つけられなくなったと推測できたのですが、この場合botの呼び出しの引数をどのようにirc.pyの方へ渡せば良いのでしょうか?
278
278
 
279
279
  わかる方がいらしたらぜひアドバイスをお願い致します。
280
+
281
+
282
+
283
+ 2020/04/16追記
284
+
285
+ 指摘を基に修正したところ新たなエラーがでました。
286
+
287
+ ```irc
288
+
289
+ import socket
290
+
291
+ import sys
292
+
293
+
294
+
295
+ class IRC:
296
+
297
+ irc = socket.socket()
298
+
299
+
300
+
301
+ def __init__(self):
302
+
303
+ self.irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
304
+
305
+
306
+
307
+ def send(self, chan, msg):
308
+
309
+ self.irc._send_raw("PRIVMSG " + chan + " " + msg + "\n")
310
+
311
+
312
+
313
+ def _send_raw(self, line, encoding="utf-8"):
314
+
315
+ self.irc._send_raw(line.encode(encoding) + b"\r\n")
316
+
317
+
318
+
319
+ def connect(self, server, channel, botnick):
320
+
321
+ # defines the socket
322
+
323
+ print("connecting to:" + server)
324
+
325
+ self.irc.connect((server, 6667)) # connects to the server
326
+
327
+ self.irc._send_raw("USER " + botnick + " " + botnick + " " + botnick + " :This is a fun bot!\n") # user authentication
328
+
329
+ self.irc._send_raw("NICK " + botnick + "\n")
330
+
331
+ self.irc._send_raw("JOIN " + channel + "\n") # join the channel
332
+
333
+
334
+
335
+ def get_text(self):
336
+
337
+ text=self.irc.recv(2040) # receive the text
338
+
339
+
340
+
341
+ if text.find(b'PING') != -1:
342
+
343
+ self._send_raw('PONG' + text.split()[1])
344
+
345
+ return text
346
+
347
+ ```
348
+
349
+
350
+
351
+ ```Python
352
+
353
+ /home/yuta/Desktop/work/python/PycharmProjects/TestPJ/venv/bin/python /home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/bot.py
354
+
355
+ connecting to:irc.freenode.net
356
+
357
+ Traceback (most recent call last):
358
+
359
+ File "/home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/bot.py", line 10, in <module>
360
+
361
+ irc.connect(server, channel, botnick)
362
+
363
+ File "/home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/irc.py", line 20, in connect
364
+
365
+ self.irc._send_raw("USER " + botnick + " " + botnick + " " + botnick + " :This is a fun bot!\n") # user authentication
366
+
367
+ AttributeError: 'socket' object has no attribute '_send_raw'
368
+
369
+
370
+
371
+ Process finished with exit code 1
372
+
373
+
374
+
375
+ ```
376
+
377
+
378
+
379
+ クラスsocketが_send_raw属性を持たないとエラーが出ていますが、なぜクラスsocketがここで出てくるのかよくわかりません。
380
+
381
+ IRCクラス内の属性だと思ったのですが、この辺の仕組みがよく理解できていないように思います。
382
+
383
+ エラーの原因がわかりましたらご教授お願いいたします。

1

回答を基に新たに修正して発生したエラーへの問い合わせ

2020/04/16 14:45

投稿

Yuta_for
Yuta_for

スコア21

test CHANGED
File without changes
test CHANGED
@@ -139,3 +139,141 @@
139
139
 
140
140
 
141
141
  わかる人がいましたらご教授お願いいたします。
142
+
143
+
144
+
145
+ 2020/4/26追記
146
+
147
+ 指摘点を基に修正しましたが新たなエラーが出ました。
148
+
149
+ ```irc
150
+
151
+ import socket
152
+
153
+ import sys
154
+
155
+
156
+
157
+ class IRC:
158
+
159
+ irc = socket.socket()
160
+
161
+
162
+
163
+ def __init__(self):
164
+
165
+ self.irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
166
+
167
+
168
+
169
+ def send(self, chan, msg):
170
+
171
+ self.irc.send("PRIVMSG " + chan + " " + msg + "\n")
172
+
173
+
174
+
175
+ def _send_raw(self, line, encoding="utf-8"):
176
+
177
+ self.irc.send(line.encode(encoding) + b"\r\n")
178
+
179
+
180
+
181
+ def connect(self, server, channel, botnick):
182
+
183
+ # defines the socket
184
+
185
+ print("connecting to:" + server)
186
+
187
+ self.irc.connect((server, 6667)) # connects to the server
188
+
189
+ self.irc.send("USER " + botnick + " " + botnick + " " + botnick + " :This is a fun bot!\n") # user authentication
190
+
191
+ self.irc.send("NICK " + botnick + "\n")
192
+
193
+ self.irc.send("JOIN " + channel + "\n") # join the channel
194
+
195
+
196
+
197
+ def get_text(self):
198
+
199
+ text=self.irc.recv(2040) # receive the text
200
+
201
+
202
+
203
+ if text.find(b'PING') != -1:
204
+
205
+ self._send_raw('PONG' + text.split()[1])
206
+
207
+ return text
208
+
209
+ ```
210
+
211
+
212
+
213
+ ```bot
214
+
215
+ from irc import *
216
+
217
+ import os
218
+
219
+ import random
220
+
221
+
222
+
223
+ channel = "#testit"
224
+
225
+ server = "irc.freenode.net"
226
+
227
+ botnick = "reddity"
228
+
229
+
230
+
231
+ irc = IRC()
232
+
233
+ irc.connect(server, channel, botnick)
234
+
235
+
236
+
237
+ while 1:
238
+
239
+ text = irc.get_text()
240
+
241
+ print(text)
242
+
243
+
244
+
245
+ if "PRIVMSG " in text and channel in text and "hello" in text:
246
+
247
+ irc.send(channel, "HEllo!")
248
+
249
+ ```
250
+
251
+
252
+
253
+ ```Python
254
+
255
+ /home/yuta/Desktop/work/python/PycharmProjects/TestPJ/venv/bin/python /home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/bot.py
256
+
257
+ Traceback (most recent call last):
258
+
259
+ File "/home/yuta/Desktop/work/python/PycharmProjects/TestPJ/networking/bot.py", line 10, in <module>
260
+
261
+ irc.connect(server, channel, botnick)
262
+
263
+ AttributeError: 'IRC' object has no attribute 'connect'
264
+
265
+
266
+
267
+ Process finished with exit code 1
268
+
269
+
270
+
271
+ ```
272
+
273
+
274
+
275
+ connect属性を持っていないとエラーがでました。
276
+
277
+ irc.pyの該当属性を入れ子にしてタブをずらしたことで属性を見つけられなくなったと推測できたのですが、この場合botの呼び出しの引数をどのようにirc.pyの方へ渡せば良いのでしょうか?
278
+
279
+ わかる方がいらしたらぜひアドバイスをお願い致します。