Closed4
WASM を使って安全に Discord から Ruby を実行する
Discord で Ruby が実行できたら便利なのでやってみる
bot 自体は discordrb を使っていて、
require 'discordrb'
require 'shellwords'
def parser(message)
split_message = Shellwords.shellsplit(message)
command = split_message.first
args = split_message[1..]
[command, args]
end
bot.message do |event|
message = event.message.content
command, args = parser(message)
result = eval(args.first)
event.respond(result)
end
こんな感じで良さそう。
rm -rf /
が渡ってきたら bot の実行環境が吹き飛びますが
実行環境が吹き飛ぶのはだるいので、なんらかの仮想環境を用意すると良さそう。
たとえば、 Docker なり。
今回は wasm でやってみる。(実際に実行する環境は wasmer だけど)
wasmer のセットアップは cargo が入っていれば、 $ curl https://get.wasmer.io -sSfL | sh
で済む。
wasmer が入っていれば、 Ruby の実行は wasmer katei/ruby -- -e "p 1"
で済む。
なので、これを bot から実行できるようにする。
こんな感じ
bot.message do |event|
message = event.message.content
command, args = parser(message)
code = args.first
result = `wasmer katei/ruby -- -e "p (#{code})"`
event.respond(result)
end
Discord から Ruby が実行できて便利
このスクラップは2023/07/19にクローズされました