teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

追記

2020/04/12 18:50

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -5,6 +5,7 @@
5
5
  - また、エラーの内容とは別の部分ですが、行末の "n" や "rn" に関しては、
6
6
  エスケープシーケンスが消えてしまってるので "\n", "\r\n" に。
7
7
  - PONGを返すところはtypoで、find ではなく send です。
8
+ - "PRIVMSG " <- スペースが必要です
8
9
 
9
10
  修正方法の一例を挙げると。
10
11
 

5

diff修正。正誤が逆になっていた

2020/04/12 18:50

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -17,8 +17,8 @@
17
17
  例えば、他の日本語のサーバーならiso-2022-jp等がありました。
18
18
 
19
19
  ```diff
20
- + self.irc.find('PONG ' + text.split() [1] + 'rn')
20
+ - self.irc.find('PONG ' + text.split() [1] + 'rn')
21
- - self.irc.send(b'PONG ' + text.split() [1].encode("utf-8") + b'\r\n')
21
+ + self.irc.send(b'PONG ' + text.split()[1].encode("utf-8") + b'\r\n')
22
22
  ```
23
23
 
24
24
  送受信は全部変更する必要があるので、メソッドにしておくとよいです。

4

参照元のコードに準拠 sendall -> send

2020/04/12 16:09

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -28,7 +28,7 @@
28
28
  # メソッド名は、何か適当に内部で使われるもの風な名前に。
29
29
 
30
30
  def _send_raw(self, line, encoding="utf-8"):
31
- self.irc.sendall(line.encode(encoding) + b"\r\n")
31
+ self.irc.send(line.encode(encoding) + b"\r\n")
32
32
 
33
33
  # 呼び出し側: 例)
34
34
  self._send_raw('PONG ' + text.split()[1])

3

コード修正

2020/04/12 16:05

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  self.irc.sendall(line.encode(encoding) + b"\r\n")
32
32
 
33
33
  # 呼び出し側: 例)
34
- self._send_raw('PONG ' + text.split() [1])
34
+ self._send_raw('PONG ' + text.split()[1])
35
35
  ```
36
36
 
37
37
  受信するデータもバイト型になっています。

2

マークアップでdiffを利用

2020/04/12 16:04

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  ~~(freenodeは未テストなので解りません)~~ クライアントの設定確認utf-8 でした。
17
17
  例えば、他の日本語のサーバーならiso-2022-jp等がありました。
18
18
 
19
- ```python
19
+ ```diff
20
20
  + self.irc.find('PONG ' + text.split() [1] + 'rn')
21
21
  - self.irc.send(b'PONG ' + text.split() [1].encode("utf-8") + b'\r\n')
22
22
  ```
@@ -30,10 +30,7 @@
30
30
  def _send_raw(self, line, encoding="utf-8"):
31
31
  self.irc.sendall(line.encode(encoding) + b"\r\n")
32
32
 
33
-
34
-
35
33
  # 呼び出し側: 例)
36
-
37
34
  self._send_raw('PONG ' + text.split() [1])
38
35
  ```
39
36
 
@@ -41,7 +38,7 @@
41
38
  値チェック等は文字列と同じ find が使えますが、
42
39
  バイト型のデータが要求されます。
43
40
 
44
- ```python
41
+ ```diff
45
42
  - if text.find('PING') != -1:
46
43
  + if text.find(b'PING') != -1:
47
44
  ```

1

文字コードの設定確認

2020/04/12 16:03

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  IRCプロトコルの規定に文字コードの規約はなかったので、
15
15
  文字コードはサーバーの設定に依存します。
16
- (freenodeは未テストなので解りません)
16
+ ~~(freenodeは未テストなので解りません)~~ クライアントの設定確認utf-8 でした。
17
17
  例えば、他の日本語のサーバーならiso-2022-jp等がありました。
18
18
 
19
19
  ```python