Docs

  • WSOFT Docs
  • あみうは
    • あみうは
    • 新学期が始まりました!
    • 恋の相談
    • プチコン3号で作ったのは?
    • オススメの文庫
    • マクドナルド最高!
    • ios11β レビュー
    • あみうはの歌について
    • ついに自分のソフトウェアのホームページができました。
    • Windowsタブレットをリセットして起動しなくなった人のために
    • PCレスで YouTubeの曲を携帯mp3プレイヤーで聴く(iPhone)
    • 食べられないラズベリーパイを買いました。(1)
    • ラズベリーパイの下ごしらえ(2)
    • 小説始めます~
    • 女子がキュンとくる行動ベスト3!!
    • MacとWindowsについてあまり知られていない事
    • macでできる裏技
    • ドコモの格安スマホ「MONO」買っちゃいました☆いい所をいくつか
    • 『レビュー』iPhone6sを1年間使い続けて思ったこと
    • iPhoneの拡大鏡に関するバクを発見しました。
    • iPhoneで圧縮ファイルを作成したり解凍する方法
    • Obscura2が今だけ無料!使い方まとめ
    • Windowsタブレットがブルースクリーンになった時のメモ
    • お知らせ
      • あみうはからのお知らせ
      • あみうは ブログ始めました。
      • 予告 web ページの更新について 🇯🇵ver 2.0.0.jp Deep Space 🇺🇸ver 2.0.0 Deep Space
      • あみうはショップから大切なお知らせ
      • みんなの投稿サービス終了のお知らせ
      • あけましておめでとうございます
      • あみうはホームページをアップデートしました。
      • あみうは はついに1周年を迎えました!!1年間を振り返ります!
      • あみうはダウンロードの閉鎖について
      • 特定商取引法に基づく表記
      • あみうは系サイトの閉鎖について
  • ブログ
    • ブログ
    • WSOFT AdventWeek 2022のお知らせ
    • DiscordのBotは多重人格の夢を見るか?
    • WSOFTのアイコンを入手する
    • WSOFTDocs へようこそ
    • WSOFTの製品の一覧
    • wsoft.wsへのドメイン移行に関する情報
    • WSOFTのロゴ変更に関する情報
    • WSOFTのドキュメントの WSOFT Docs への移行に関する情報
    • Raspberry Pi初代やZeroでAliceScriptを実行する
    • Losetta0.9.16に更新した後のエラーを直す
    • WSOFT AdventWeekへようこそ
  • 共同作成ガイド
    • 概要
    • コントリビュータ行動規範
    • リンクの使い方
    • Markdownリファレンス
    • メタデータ
    • テキストの書式設定に関する指針
  • 法的資料
    • 法的資料
    • Alice-EULA-R
    • WSOFT-EULA
    • WSTube エンドユーザー利用規約
    • あみうは利用規約
    • WSOFTダウンロードセンター利用規約
    • 使用条件
  • 製品
    • 製品
    • PCMX
      • ブートローダーメニューの使い方
    • WSOFTアカウント
      • WSOFTアカウントの概要
      • WebからWSOFTアカウントにログインする
      • WindowsアプリからWSOFTアカウントにログインする
      • WSOFTオンライン手続きの概要
    • AliceScript
      • AliceScript
      • 謝辞
      • ダウンロード
      • Alice(キャラクター)
      • AliceScriptのツアー
      • Wikiの概要
      • APIブラウザー
        • APIブラウザー
        • Alice
          • delay
          • exit
          • function
          • import
          • include
          • lock
          • print
          • string_format
          • using
          • write
          • Environment
            • env_commandLine
            • env_commandLineArgs
            • env_set_exitCode
            • env_hasshutdownstarted
            • env_Is64BitOperatingSystem
            • env_Is64BitProcess
            • env_MachineName
            • env_NewLine
            • env_os_platform
            • env_os_version
          • Exception
            • Exception
            • ErrorCode
            • Message
            • ToString
          • Interpreter
            • Type
              • Type
              • Activate
              • Base
              • IsObject
              • Namespace
              • ToNativeProperty
              • ToString
          • Math
            • math_abs
            • math_acos
            • math_acosh
            • math_atan
            • math_atan2
            • math_atanh
            • math_bitdecrement
            • math_bitincrement
            • math_cbrt
            • math_celling
            • math_clamp
            • math_copysign
            • math_cos
            • math_cosh
            • math_e
            • math_exp
            • math_floor
            • math_fusedmultiplyadd
            • math_isprime
            • math_max
            • math_min
            • math_pi
            • math_pow
            • math_round
            • math_sin
            • math_sinh
            • math_sqrt
            • math_tan
            • math_tanh
            • math_tau
            • math_truncate
          • Net
            • web_download_file
            • web_download_file
            • web_download_text
            • web_htmldecode
            • web_htmlencode
            • web_send_ping
            • web_upload_data
            • web_upload_file
            • web_upload_text
            • web_urldecode
            • web_urlencode
          • Security
            • password_hash
            • password_hash_data
            • password_salt
            • password_verify
            • password_verify_data
          • Threading
            • signal
            • signal_wait
            • task_run
            • thread_id
            • thread_queue
        • Array
          • array
          • Add
          • AddRange
          • All
          • Any
          • Contains
          • Distinct
          • Except
          • First
          • Flatten
          • Foreach
          • IndexOf
          • Insert
          • InsertRange
          • Intersect
          • Last
          • Length
          • Merge
          • OfType
          • OrderBy
          • OrderByDescending
          • Remove
          • RemoveAt
          • RemoveRange
          • Reverse
          • Select
          • SequenceEqual
          • Size
          • Skip
          • SkipWhile
          • Sort
          • Take
          • TakeWhile
          • Union
          • Where
        • Bool
          • bool
        • Bytes
          • bytes
        • Delegate
          • delegate
          • BeginInvoke
          • Invoke
        • None
          • none
        • Number
          • number
        • String
          • string
          • CompareTo
          • Contains
          • EndsWith
          • Format
          • IndexOf
          • Insert
          • IsEmptyOrNull
          • IsEmptyOrWhite
          • IsNormalized
          • Join
          • LastIndexOf
          • Normalize
          • PadLeft
          • PadRight
          • Remove
          • RemoveAt
          • Replace
          • Split
          • StartsWith
          • SubString
          • ToLower
          • ToLowerInvariant
          • ToUpper
          • ToUpperInvariant
          • Trim
          • Trim
          • TrimStart
        • Variable
          • variable
          • Clone
          • Convert
          • DeepClone
          • Dispose
          • Equals
          • Properties
          • ToString
          • Type
      • 変更履歴
        • 新機能の一覧
        • AliceScript GoldenMasterの新機能
        • AliceScript 2.1の新機能
        • AliceScript 2.2の新機能
        • 互換性に影響を与える変更点
        • Nightyビルドの変更履歴
        • AliceScript RC2の新機能
        • Losetta
          • Losettaの更新履歴
          • Losetta 0.9.15
          • Losetta 0.9.16
          • Losetta 0.9.17
          • Losetta 0.9.18
          • Losetta 0.9.19
          • Losetta 0.9.20
      • 基本
        • 基本
        • AliceScript ADK
        • AlicePackage
        • AliceSister
        • AliceSister
        • AliceScriptのコーディング規約
        • イベント
        • 例外
        • 式
        • 前処理指令
        • AliceModel
        • 変数
      • Alice in Discord
        • Alice in Discordの紹介
        • Alice in Discordの基礎
        • Alice in Discord コミュニティガイドライン
        • Alice in Discordに関連するプロジェクトの一覧
      • 相互運用
        • 基本的なAliceScriptライブラリの開発
      • チュートリアル
        • チュートリアル
        • 初めてのAliceScript
        • パッケージのビルド
        • 数値型の計算誤差
        • 自分自身の関数を取得する
        • AlicePackageの関連付け
        • WSOFTScriptからの移行
        • AliceScriptで安全にパスワードを保存する
        • Losettaを更新する
    • ダウンロードセンター
      • WSOFTダウンロードセンターの概要
      • API
      • 検索
      • マネージャー
        • WSOFTダウンロードセンターマネージャーの概要
        • 更新履歴
          • WSOFTダウンロードセンター管理端末の更新情報
          • バージョン50
          • バージョン53
    • ほめて.ws
      • ほめて.wsの概要
    • アイコンメーカー
      • アイコンメーカーの概要
    • WSOFTScript
      • WSOFTScript
      • WSOFTScript 0.07 R3
      • WSOFTScript 0.07 R4
      • WSOFTScript 2020 LTSの情報
      • WSOFTScriptのライフサイクル
      • 使用されているLosettaのバージョンを確認する
      • WSOFTScript Pocket 2020 Beta
      • Shangri-la 0.07 R4
      • Shangri-la 2020 LTS
    • Unidet
      • Unidetへようこそ
    • WebSailing
      • WebSailing
      • 謝辞
      • APIブラウザー
      • 更新履歴
        • WebSailingNXの更新情報
        • NX 83
        • NX 104.1
        • NX 105
        • NX 105.1
        • NX 106
        • NX 106.1
        • NX 106.2
        • NX 107
        • NX 107.1
        • NX 107.2
        • NX 108
        • NX 109
        • NX 110
        • NX 110.1
        • NX 110.2
        • NX 110.3
        • NX 111
      • GL
        • WebSailingの仕様について(GL系のみ)
        • 更新履歴
          • WebSailingGLの更新情報
          • 1.5.01
          • 1.5.02
          • 1.5.03
          • 1.5.04
          • 1.5.05
          • 1.5.06
          • 2.0
          • 2.1
          • 3.0
          • 20Edition
        • ガイド
          • WebSailingGLプロンプトリファレンス
          • エラーコードE001
          • エラーコードE002
          • エラーコードE003
          • エラーコードU001
          • エラーコードU002
          • WebSailingGLで特定のUrlをブロックする方法
          • WebSailingを更新する方法
          • WebSailingヘルプ
          • WebSailingのコンポーネント変更についてのお知らせ
          • WebSailingプロンプトを極める!その1 API を極める
      • NX(レガシー)
        • WebSailingNX(レガシー)
        • 更新履歴
        • 開発者向け
          • サービス終了後も拡張機能を実行する方法
          • プラグインからSafeBrowsingAPIを呼び出す
          • プラグインガードの概要
        • ガイド
          • WebSailingNXターミナルリファレンス
          • PlusLibraryでライブラリエラー500が発生する場合
          • 認識エラーM300が発生する場合
          • WebSailingのキャッシュを削除する
          • 全画面表示を使う方法
          • WebSailingヘルプ
          • WIWで、NXツールを使う
          • おまけ
          • 捕捉されなかった例外が発生しましたと表示される場合
        • PlusLibrary
          • WSTubeMOD
          • 携帯電話モード
          • 郵便番号検索
      • チュートリアル
        • チュートリアル
        • 起動時に使用される設定を構成する
        • 設定が原因で起動できないと考えられる場合の対処方法
        • WebSailingのWindows7/8.1 Server2012/R2のサポート終了に関するお知らせ
        • AliceScriptを使ってWebSailingを制御する
    • WSNET
      • WSNET
      • WSNETの概要
      • ニュース
        • ニュース
        • WSNET/WAN DHCP機能提供開始
        • WSOFTダウンロードセンターマネージャー v42リリース
        • WSNETDocs提供開始
        • WSOFTダウンロードセンターマネージャーのWSOFTダウンロードセンターマネージャーDocsへの移行に関するお知らせ
      • チュートリアル
        • チュートリアル
        • SoftEtherを使用してWSWANに接続する
        • OpenVPNを使用してWSWANに接続する
        • 証明書のインストール
    • WSTodon
      • WSTodonの概要
      • よくある質問と回答
    • WSTube
      • WSTubeの紹介
      • クレジット
      • WSTube ユーザーガイド
      • お知らせ
        • WSTube NEXTの紹介
        • WSTube NEXT Procyonの紹介
        • WSTube NEXT October’2019の紹介
    • Lantana
  • 生存報告
    • 生存報告
    • 22年度1学期
      • 生存報告
      • イントロダクション
      • おやすみ。
      • 生存報告
      • つながり
      • 生存報告論
      • その一言で、
      • 信じるということ
      • またね。
    • 22年度2学期
      • やさしさ
      • 心の城
      • 勤労感謝の日
      • 自分のことを助けられるのは自分しかいない
      • 大丈夫は大丈夫じゃない
      • おしごと
      • 大きなものは無視できない
      • 石ころの唄
      • 表裏一体
目次
  • はじめに
  • Alice in Discordとは?
  • 修羅の道
  • Hyper-Aliceとは?
  • クラスメイトからみた「Alice in Discord」
  • プログラマから見た「Alice in Discord」
  • 対話的なBotの開発
  • まとめ:「ALiceProject」の実現の意義

DiscordのBotは多重人格の夢を見るか?

  1. WSOFTDocs
  2. ブログ
  3. DiscordのBotは多重人格の夢を見るか?

高1の時間の大部分を溶かしたAlice in Discordとは結局なんだったのか説明します。


たい | 2022-11-22

はじめに

ブログ記事ではお初にお目にかかります、たいと申します。WebSailingやAliceScriptなどを開発している高校2年生の自称プログラマーで同人サークル「WSOFT」の団長もしています。

高校のクラスDiscord鯖でBotを開発し、完成しないままクラス替えを迎えたので記事に残そうと思います。

Alice in Discordとは?

私が高校に入学してまだ日の立たないうちに、私のクラスではクラスLINEならぬクラスDiscordサーバーができました

技術を持てばそれを誇示したくなるのが技術者の性。ついでに自称プログラマの友達を増やしたかった私は、次の条件を満たすDiscordのBotを作り、鯖主に導入してもらうことを計画しました。

  • 「おみくじ」や「時報」などの簡単に遊べる機能を実装する
  • 誰でも簡単にBotのアイデアを形にして、すぐサーバーに導入できるようにする

AliceProject公式アンバサダー この一連のプロジェクトはAliceProjectと名づけられ、matsuzenがキャラクターデザインを担当しました。

修羅の道

誰でも簡単にBotのアイデアを形にして、すぐにサーバーに導入できるようにするということは、本来必要であった手順を代行するか、自動的に実行できるようにしなければならないことを意味します。さらに、(意図的でなくても)クラスメイトの誰かが問題のあるBotを導入してしまうとAliceProject全体の信頼を失ってしまうことになることも大きな問題です。

そこで、一人一人の考えたBotのプログラムを、ちょうど多重人格のように一つのBotから複数同時に実行し、それぞれのプログラムに何かあってもほかに影響しないように設計しました。

Alice in Discord は下の図のような構造をとることで、当初掲げた目標を達成しようとしました。

graph LR ユーザー-->AliceBot AliceBot-->Hyper-Alice Hyper-Alice-->Bot1 Hyper-Alice-->Bot2 Hyper-Alice-->Bot3

また、プログラムは簡単に記述でき、かつ、必要な機能は一通り備えている必要があります。そこで、人格のAlice in Discord内での振る舞い(つまり、Botの動作そのものを意味します)を定義するためにAliceScriptを開発しました。AliceScriptでプログラミングした人格は、その立ち振る舞いと、それに必要なデータや人格の基本設定などを一つにまとめて、人格ファイル(*.identity)となり、Hyper-Aliceで実行できるようになります。

graph TD; Botの振る舞いを指定するプログラム.alice -->人格ファイル.identity; 人格の名前や必要な権限などの定義-->人格ファイル.identity; その他の画像や音楽などのデータ-->人格ファイル.identity;

Hyper-Aliceとは?

Hyper-Aliceは、一般的なコンピュータのOSに似ていて、Alice in Discordで展開される様々なプログラム(ここでは人格と呼ぶことにします)の面倒の一切を負うプログラムです。Hyper-Aliceには次のような機能があります。

  • 人格を起動する 人格はちょうどアプリケーションのように簡単に起動でき、確実に終了できます。
  • 人格を終了する
  • 人格を破壊する 通常の処理で終了しようとしても終了しない人格は、Hyper-Aliceによって強制終了されます。
  • 人格を交代させる 人格によってリクエストがあった場合に、その人格に処理を交代します。しかし、いつでも交代できるわけではなく、Hyper-Aliceがその必要性を判断したうえで交代させます。それに従わない人格は破壊されます。

これらの様々な機能を複雑に実装することで、Alice in Discordは安定して動作する設計となりました。

クラスメイトからみた「Alice in Discord」

プログラミングをしないクラスメイトからみると、Alice in Discordは単におもしろBotとして機能します。

例えば、すでに誰かの手によってAlice in Discordにおみくじ.identityがプログラミングされているとすると、音楽Botの要領でクラスメイトはコマンドを実行するとその人格を召喚できます。

Discord
/start おみくじ

クラスメイトから見て、Hyper-Aliceは完全に透過的に機能します。そのため、サーバー内で「おみくじ」と発言するだけで今日の運勢が確認できます。

おみくじを終了したくなったら、次のように発言して終了します。

Discord
/exit おみくじ

誰でも人格を終了することができるようになっていると、混乱を生じさせてしまう可能性があります。そこで、あらかじめexitを動作させないようにプログラミングしておき、鯖主に/kill おみくじと発言してもらうこともできます。

プログラマから見た「Alice in Discord」

いざ使ってもらうことができれば、これに自分の意見を反映させたいと思う人が出るのは自然なことです。Alice in Discordでは、クラスメイトがDiscord内から簡単にプログラミングができるようになっています。

例えば、次の例では召喚されたら「Hello,World!」を表示して終了する人格をプログラミングします。

Discord
/push hello
print("Hello,World!");

プログラミング出来たら、それをすぐに試せます。

Discord
/start hello
Alice in Discord> Hello,World!

対話的なBotの開発

クラスメイトの発言を受け取って返信することもできます。

Alice in Discordは各人格に、meクラスのインスタンスを提供します。これによって、あたかも自分がそのBotそのものであるかのようにふるまえます。

例えば、誰かが「にゃ~ん」と発言したら「にゃにゃ~ん」と返信する人格は次のようにプログラムできます。

Discord
/push nya
 me.Recived += delegate(e)
  {
    if(e.Content=="にゃ~ん")
      {
         e.Reply("にゃにゃ~ん");
      }
  }
delay(-1);

まとめ:「ALiceProject」の実現の意義

もともと、「ALice in Discord」は、AliceScriptを基に私が開発した純国産の自作プログラムです。これは、習得が簡単かつ高度なプログラムを設計できるプログラミング言語である「C#言語」で造られています。また、「Alice in Discord」内での共通言語である「AliceScript」も、WSOFTScriptをベースに構文をC#に似せて造られています。 そして、AliceScriptは、オープンソース化されています。Alice in Discordもオープンソース化を計画しています。

今回、クラス鯖の解散に間に合わなかったものの私は、今あるDiscordBotやWSOFTScriptの仕組みを改造して、Discordを使って誰でもプログラミングができるようにしました。そして、この「Alice in Discord」や「AliceScript」は、基本的な.NETの知識に基づく自作プログラムです。ブラックボックスはまったく使っていません。複雑な文法や難しいアルゴリズム、数学の知識などはほとんど使用していません。

このような簡単な自作プログラムだけで、これまで存在しなかった「Discordから誰でもプログラミングができる」という体験をクラスメイトに提供するとともに、周りの友人や先輩にプログラムの可能性と、「学校配付のiPadからでも、みんなが使っているSNSからでもプログラミングができる」ということを知ってもらうことにこのプロジェクトの最大の価値があると考えます。 誰でも、このようなシステムやプログラムを書けば(または、すでにあるプロジェクトをビルドすれば)、同じものが手元で確実に造れるのだ、再現できるのだという実感を得られることに、大きな意味があるのです。

校長が掲げておられるAIやSociety3.0等を支えるプログラムやシステムは、その多くが膨大なプログラムの組み合わせでできていて、もはやその全体像を誰も把握仕切れません。そして、そのレイヤーは大抵高く、ブラウザから利用できるものや「AIを活用した~」、「SDGsに配慮した~」等トレンドによって生み出されたものが大半です。そう、派手なゲームなどの類です。これと比較して、私の開発した、プログラミングの基盤である「AliceScript」や「Alice in Discord」はとても低いレイヤで、地味に動作します。構成要素は少なく、理解そのものは簡単です。そして、他の様々なプログラムやアプリケーションが、この私のプログラムで造られる基盤の上で作成されうる可能性を持っています。

「AliceScript」のようなフレームワークは縁の下の力持ちであり、それ自体が主役ではありません。他のクラスメイトが設計したプログラムはどんなものであっても一度受け入れ、そのコードが安全に動作することを保証し、セキュリティに違反したプログラムを検出して破壊するセキュリティ機構である「Hyper-Alice」もまたそのような類です。これは、多くの場合OSやCPUがすでに行っていて、開発者ですらその目に止まることはありません。しかし、これらは自作できるということを私は証明しました。

誰でも、自らの手でフレームワークを創ることが可能なのです。そもそも、コンピューターやCPU、OS等の価値は、そこにあるのではないでしょうか。自力で試行錯誤して造った自作プログラム、自作システム、自作ネットワークが意図したとおりに動いた時、これほどの楽しみは他にないと考えています。AliceProjectは完遂しなかったとはいえ、このプロジェクトを知り、携わってくれたクラスメイトがこの楽しみを実感するきっかけになれば幸いです。

何でもやれば自分たちで作れるということを実感してもらうために、「Alice in Discord」があって、「AliceScript」があって、「AliceProject」があります。 「ありすたん」はそのために生まれてきました。

Alice in Discord

検索
No results found