slack으로 접는 메시지를 hubot에서 보내기
목적
hubot등의 bot로 slack의 메세지를 송신할 때에 아래와 같은 접을 수 있는 형태로 보내고 싶다.
함정
slack attachment를 사용하면 할 수 있지만, slack attachment는 메시지(text)가 8000byte(8000문자는 아니다)로 중단된다고 하는 함정이 존재하므로, 긴 메시지를 보낼 때는 8000byte마다 구분해(가능하면 개행 등 단락의 좋은 곳에 잘라서) 보낼 필요가 있다.
회피 코드
toUtf8String = (str) ->
return unescape(encodeURIComponent(str))
toJSString = (str) ->
return decodeURIComponent(escape(str))
sendAttachmentMessage = (robot, msg, pretext, text, delay) ->
setTimeout ->
robot.emit 'slack.attachment',
message: msg.message
content:
# see https://api.slack.com/docs/attachments
pretext: pretext
text: text
fallback: "Attachment fallback"
, delay
# robot : hubotのインスタンス
# msg : msgインスタンス
# message : 送信するメッセージ(string)
# reply : 返信かどうか(bool)
module.exports.longMessage = (robot, msg, message, reply) ->
delay = 0
if reply
reply_to = "@#{msg.message.user.name}"
else
reply_to = ""
# slackのattachmentsは8000byteで打ち切られるため、その対策
message_utf8 = toUtf8String(message)
while message_utf8.length > 0
if message_utf8.length >= 8000
idx = message_utf8.lastIndexOf('\n', 8000)
if idx < 0
idx = 8000
else
idx = idx + 1
else
idx = message_utf8.length
tmp = message_utf8.substr(0, idx)
message_utf8 = message_utf8.substr(idx)
# メッセージ毎に1秒遅延を入れる(順番入れ替わり対策)
sendAttachmentMessage(robot, msg, reply_to, toJSString(tmp), delay)
reply_to = ""
delay += 1000
메시지의 송신이 비동기 적으로 행해지기 때문에, 단락지어 송신했을 때에 순서가 바뀔 우려가 있다. 이 때문에, 지연을 넣어 송신하고 있다. 다사이.
Reference
이 문제에 관하여(slack으로 접는 메시지를 hubot에서 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kackytw/items/1855e418221fd1144b17
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
slack attachment를 사용하면 할 수 있지만, slack attachment는 메시지(text)가 8000byte(8000문자는 아니다)로 중단된다고 하는 함정이 존재하므로, 긴 메시지를 보낼 때는 8000byte마다 구분해(가능하면 개행 등 단락의 좋은 곳에 잘라서) 보낼 필요가 있다.
회피 코드
toUtf8String = (str) ->
return unescape(encodeURIComponent(str))
toJSString = (str) ->
return decodeURIComponent(escape(str))
sendAttachmentMessage = (robot, msg, pretext, text, delay) ->
setTimeout ->
robot.emit 'slack.attachment',
message: msg.message
content:
# see https://api.slack.com/docs/attachments
pretext: pretext
text: text
fallback: "Attachment fallback"
, delay
# robot : hubotのインスタンス
# msg : msgインスタンス
# message : 送信するメッセージ(string)
# reply : 返信かどうか(bool)
module.exports.longMessage = (robot, msg, message, reply) ->
delay = 0
if reply
reply_to = "@#{msg.message.user.name}"
else
reply_to = ""
# slackのattachmentsは8000byteで打ち切られるため、その対策
message_utf8 = toUtf8String(message)
while message_utf8.length > 0
if message_utf8.length >= 8000
idx = message_utf8.lastIndexOf('\n', 8000)
if idx < 0
idx = 8000
else
idx = idx + 1
else
idx = message_utf8.length
tmp = message_utf8.substr(0, idx)
message_utf8 = message_utf8.substr(idx)
# メッセージ毎に1秒遅延を入れる(順番入れ替わり対策)
sendAttachmentMessage(robot, msg, reply_to, toJSString(tmp), delay)
reply_to = ""
delay += 1000
메시지의 송신이 비동기 적으로 행해지기 때문에, 단락지어 송신했을 때에 순서가 바뀔 우려가 있다. 이 때문에, 지연을 넣어 송신하고 있다. 다사이.
Reference
이 문제에 관하여(slack으로 접는 메시지를 hubot에서 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kackytw/items/1855e418221fd1144b17
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
toUtf8String = (str) ->
return unescape(encodeURIComponent(str))
toJSString = (str) ->
return decodeURIComponent(escape(str))
sendAttachmentMessage = (robot, msg, pretext, text, delay) ->
setTimeout ->
robot.emit 'slack.attachment',
message: msg.message
content:
# see https://api.slack.com/docs/attachments
pretext: pretext
text: text
fallback: "Attachment fallback"
, delay
# robot : hubotのインスタンス
# msg : msgインスタンス
# message : 送信するメッセージ(string)
# reply : 返信かどうか(bool)
module.exports.longMessage = (robot, msg, message, reply) ->
delay = 0
if reply
reply_to = "@#{msg.message.user.name}"
else
reply_to = ""
# slackのattachmentsは8000byteで打ち切られるため、その対策
message_utf8 = toUtf8String(message)
while message_utf8.length > 0
if message_utf8.length >= 8000
idx = message_utf8.lastIndexOf('\n', 8000)
if idx < 0
idx = 8000
else
idx = idx + 1
else
idx = message_utf8.length
tmp = message_utf8.substr(0, idx)
message_utf8 = message_utf8.substr(idx)
# メッセージ毎に1秒遅延を入れる(順番入れ替わり対策)
sendAttachmentMessage(robot, msg, reply_to, toJSString(tmp), delay)
reply_to = ""
delay += 1000
Reference
이 문제에 관하여(slack으로 접는 메시지를 hubot에서 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kackytw/items/1855e418221fd1144b17텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)