メモ帳 or チラシの裏的な何か

ネット関係とかアニメとか。特に制限は無しです

Python AttributeError 対応方法

皆さんこんにちは。

 

今回は完全にメモです。最近忘れっぽいので....

 

 

AttributeErrorが出た時にまず見ること。

 

ファイル名とモジュール名が一緒じゃないか確認する。

 

というのも、ファイル名とモジュール名が同じだった場合、ファイル名が優先して見られるらしく、モジュールが見られないので実行時エラーになるっぽいです。

 

当たり前と言えば当たり前ですが、それを忘れてポカやらかしたのでメモ程度にです。

 

Discord マルコフ連鎖botで画像等ファイル送信時にエラーが出ない様にする方法

皆さんこんにちは。

短期間のうちに投稿しました。

ブログ記事折角更新したので、モチベ―ションが続く限りは積極的に更新していこうという意味があったりします。

 

では、早速表題に入っていきますが、先日書いた記事(

プログラミング初心者がマルコフ連鎖で会話するDiscordBotを作ってみる - メモ帳 or チラシの裏的な何か

)

にて、Discordbotで対話AIをつくる方法を書きましたが、このコードのままだと写真等のファイル送信時にエラーメッセージが出てしまうので、ファイル送信時にエラーが出ない様に(エラー回避)するコードを追加しようかと思います。

 

と言っても数行追加するだけですが。

 

では、実際に書いていきます。

@client.event #Discordbotへの投稿とコメント取得
async def on_message(message):
    if client.user != message.author:
        text = message.content
        res = make_reply(text)
        await client.send_message(message.channel, res)


client.run('token')

 

というコードを

@client.event
async def on_message(message):
    if message.attachments:
        pass

    elif client.user != message.author:
            text = message.content
            res = make_reply(text)
            await client.send_message(message.channel, res)

client.run('token')

 

に変えます。

ホントは != 等を使ってすれば綺麗に済んだのですが、それを使うと何故かエラーが出ちゃうのでしぶしぶこの形にしました。

 

何がともあれ、これに変えると画像ファイルを無視できるかと思います。

ですが、これにした場合、画像添付時のコメントもBotは認識しませんので注意が必要です。

 

では、本日はこれぐらいにしておこうと思います。

ご覧いただきありがとうございました!

 

追記:上記編集はGithubにCommit済みです

github.com

プログラミング初心者がマルコフ連鎖で会話するDiscordBotを作ってみる

皆さんこんにちは。

久しぶりのブログ更新です。

 

今回はタイトル通りですが、自分のメモという面が大きいです。

ですので見にくいかもしれませんが、参考になれば幸いです。

 

今回は人口知能を作ってみます。マルコフ連鎖なので無能と言われればそこまでですが、AIですAI。

 

 

そもそも、マルコフ連鎖とは何か。という話なのですが、多くの他のブログさん同様、あまり理解できていませんが、こういう事だそうです。

マルコフ性Markov property)とは、次の状態が過去の状態に依存せず現在の状態のみによって決まる性質のことである。

マルコフ性が存在する場合、状態が {q0, q1, q2, q3, ……, qn-1} のn通りを取るような状態遷移において、現在の状態が qi であった時に次の状態 qj に遷移する確率は純に次の状態と現在の状態のみで記述され、 P(qj | qi) で決定される。

 

byニコニコ大百科

 

 Wikipediaさんや個人ブログさんでも良かったのですが、前者はもう何言ってるのか分からない、後者はなかなか簡単に説明しているのが無かったため、大百科さんにしました。

 

簡単に言っちゃうとユーザーが送信したメッセージに最適な返答を確率で求めよう!...だと思っています(間違っていたらどなたかコメントにお願いします(;'∀'))

 

さて、実際にやってみよう!なのですが、やろうとしたことは先人が大体やっているこの世の中。調べたら多数のサイトが出てきました。

 

ので、まずは参考になったサイトを紹介しようと思います。

 

TensorFlowで会話AIを作ってみた。

こちらのサイト(というかプレゼン)はまずは概念理解にお勧めです。

「AI?何それ?機械が学習するの?」

って方はまずこれを読んで概念理解から初めて頂けると分かりやすいと思います。

他のサイトとかはこんな感じです。

マルコフ連鎖でTwitter Botをつくりました | takuti.me

 

多分概念理解自体は上記でできますので(分からなかったら「マルコフ連鎖 python」とか「会話bot 作り方」とかでググってネサフすれば出てくると思います)取り敢えずはこれぐらいにしておきます。

 

次にコードで参考になった記事です。

マルコフ連鎖を使って自分らしい文章をツイートする

【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる

Windows10+Python+C#でDiscord用マルコフ連鎖Botを作った話

 

等々....

 

何十サイトと見ました。それぞれのサイトの執筆者さん、ありがとうございます。

 

上記のサイトでもコーディング能力がある方は十分できるかと思いますが、如何せん私は初心者。

もう少し簡単にしてあるサイトの方がいいと思い、ネサフを続けます。

 

....

 

そして、結局このサイトさんに書いてある内容を使わせて頂くことに。

ai-coordinator.jp

 

こちらのサイトさんが直感的に理解できましたので採用。

ただ、SlackBotですので、適宜Discord用に変換しないといけません。

 

コードを読んでいくと、どうやらマルコフ連鎖のコード部分は最後のSlackbotに返事させる部分以外は丸ごと使えるみたいでしたので、ほぼ全部(一部変えた部分もあった記憶ですが)利用させて頂きます。

 

ちなみにその時SlackBotについては全く知りませんでしたのでちょっと調べました。

閲覧させて頂いたサイト様のリンクを載せときますので参考になれば幸いです。

Pythonを使ったSlackBotの作成方法

PythonのslackbotライブラリでSlackボットを作る

 

又、janomeという形態素解析を使用しているという事なのでjanomeについても調べました。

Welcome to janome’s documentation! (Japanese) — Janome v0.3 documentation (ja)

(タイトルは英語ですが、タイトルにも書いてあるように中身は日本語です)

 

そして、肝心のDiscord部分の実装です。

上記サイト様のコードを利用させてもらいつつ、適宜Discord用に改変していきます。

フォルダ構成は以下の通りです。

 

marcov # 名前は好きな物で大丈夫です
├─ main.py #ここにソースコードを書きます。好きな名前で大丈夫です

└─ chat_bot.json #自動生成されますので、最初は無いです

 

これだけです。

Slackbotは結構多くのフォルダ分けが必要みたいですが、DiscordBotなのでソースコード1個とデータ保存用のjsonファイルだけですみます。

 

そして、Slackbot部分を適宜Discordに適応させていく作業に入ります。

 

....ここで、今更ですが、環境を書きます。

Pycharm - Pythonコードを書くためのソフトです。なくても良いですが、滅茶苦茶使いやすいですのでもしよければ是非。

Python3.6 - インストールしていないのならこれだけはインストールお願いします。じゃないとPythonコード自体動きません(;・∀・)

 

そして、discord.py とjanomeもpipでインストールしておいてください。(pip?何それ?って人は「Python pip とは」で調べたら出てくると思います)

 

そこまで出来たら、次はDiscordbot側の登録に移ります。

Discordbot作ったことのない方は以下の記事が参考になりますので、以下の記事を参考にしてbot登録を行ってください。

Pythonで簡単なDiscord Botの作り方

 

作成が終わったら、コードを書いていきましょう。

先程のサイトにあったマルコフ連鎖のコードをそのまま持ってきてください。

そして以下の部分を

@default_reply()
def default_func(message):
    text = message.body['text']     # メッセージを取り出す
    res = make_reply(text)
    message.reply(res)

以下の様に変えます。(コピペで大丈夫です)

client = discord.Client()


@client.event #Discordbot起動確認
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

@client.event #Discordbotへの投稿とコメント取得
async def on_message(message):
    if client.user != message.author:
        text = message.content
        res = make_reply(text)
        await client.send_message(message.channel, res)


client.run('token')

注意点ですが、 

・import discord をコード最上部に記述してください

・'token'の部分はご自身のDiscordトークンに変えてください。

 

 

これでマルコフ連鎖での会話が可能なdiscordbotが出来ました。

 

恐らくとんでもない量の会話練習が必要ですが、複数人で数日に渡って教育を積めばそれっぽい会話をしてくれる気はします。

 

お疲れ様でした。質問などあればコメント欄や私のdiscordのDMへ送っていただければわかる範囲でお答えします~(分からなかったら申し訳ございません(;'∀'))

 

追記:ソースコード全文をGithubに公開しました。

github.com

SproutsとAuxilium(旧Sprouts+)との違いについて

皆さんおはこんにちばんは。Sysnetです。

 

久しぶりの新規記事更新ですが、MineCraftの記事ではなく申し訳ないです。
ですが、ある程度の注目をSproutsが集めている以上、誤解を生まないためにも現状を書いておこうかと思います。(あくまで私が理解している範囲ですので、間違っている点があるかもしれません。間違っている点がありましたら気兼ねなく指摘をお願いします)

 

さて、Auxilium(通称Aux)ですが、Auxは以前は、Sprouts+という通貨名でした。(

SproutsとSprouts+について - メモ帳 or チラシの裏的な何か

)

ですが、あまりに旧開発(現Sprouts開発は日本に代わっています)の反発が強かったのか、名前変更に至ったようです。(一説ではWebデザインチーム離脱のためともいわれています)

 さて、そのAux、本日(25日)がTestnetの終了日です。

どうやら、ETHベースの初のPoSだそうなのですが、延期に延期してその程度かという意見も見られました(本来なら二月にはTestnetが始まるはずでした)。

 

では、今のSproutsとAuxの関係性を時系列順に見ていきたいと思います。

 

 

1、Sprouts開発放棄

2、Anton氏を中心とするグループが,Sprouts+を旧開発の反対の中、Sprouts保有ユーザーの支持を得て開発開始

~~~~~~~~

3、日本ユーザー、非公式コミュニティを始動

4、Sprouts+、日本の非公式コミュニティと連絡を取る

5、現状(SproutsとAuxの状況)を理解した日本非公式コミュ、SproutsとSprouts+に分裂

6、Sprouts+公式Twitter等始動

7、Sprouts+、Discord開設と共に公式に日本コミュ介入(日本コミュトップ、Sprouts+モデレータ入り)

8、Sprouts+、Auxiliumに名称変更

9、Sprouts旧開発とSprouts日本非公式コミュ、連絡が取れる

10、Sprouts日本非公式コミュ、Sprouts旧開発の許可を得て公式化(これにより、Sprouts+非公式日本コミュが形骸化)

11、Sprouts新開発(日本人開発)、HF決行を発表

 

という流れとなっています。

 

さて、SproutsとAuxの違いを列挙してみます。

 

Sprouts

・PeerCoinベースで開発

・PoS年率約1300%(日率2%)

 →HFでの修正が発表,HFで修正しても価格是正が見られない場合にSwapの可能性もあるとのこと

・PoW形式:SHA-256D

・現時点(3月25日)で発行枚数4兆超え

 

Auxilium

・ETHベースでの開発

・ETH初のPoS通貨

・PoWは不明(知ってる方コメントにてお願いします)

・公開日未定,ただし、本日(3月25日)TestNet終了

・SproutsでのSwap通貨(簡単に言うと、Sproutsで参加できるICO通貨)

 

 

となっております。

 

どちらを選択するのか、両方選択するのかは皆さんの自由ですが、あくまで筆者(私)の見解を言わせてもらいますと、Auxの方は何度もTestnet公開延期をしており、更に持ち逃げリスクまでありますので、余りオススメ出来ないなと思っております。

 

では、今回はこれぐらいしようと思います。

ご覧いただきありがとうございました。

 

MineCraft経済Modを使って何とかSproutsを利用できないか考えてみた

皆さんどうもおはこんにちばんは、Sysnetです。

どうやらSprouts運営は仕手グループという情報が出回っていたようで。そんな訳ないじゃないですか。.....とは思うんですけど、こういう噂はすぐ広まるんですよねぇ。まぁ、原因は自分にもあったようなので謝罪します。(詳細はTwitter投稿をご覧ください)

では、タイトル通りの事を考えていこうかと。

今回は大分趣味関連に走ってます。

そもそもこれをやろうと考えてたきっかけがVPSを契約したからという....ConohaですConoha、キャラで選びました(直球)

 

まぁ、それは置いといて、流石に本題に入ります。

 

まず、一番最初にしなければならない法律確認からしていこうかなと思いました。

 

仮想通貨をそのままMineCraftに移した場合、恐らく取引所の業者と同じ扱いになって違法になると推測しました。

なら、Discordを経由すれば問題ないのでは?と考えこの記事を書いている次第です。

 

何故、Discordを経由すれば問題ないと判断したかといいますと、Sproutsの水やりBotの仕組みが判断基準です。

そもそも、現在Discordでの水やりは、入金されたSPRTSを数値上の栽培中で置き換えることによって、水やり等を潤滑化しています。
とすると、その数値上のやり取りだけなので、仮想通貨の取引ではないのです。

それが根拠の一つになっています。

 

まぁ、本日はこれぐらいにして〆ようかなと思います。

もしかしたらPartⅡやるかもです。

 

Conohaは下のリンクからどうぞー(キャラ可愛いですキャラ)

VPSならConoHa|登録者数12万アカウント突破 - 期間限定キャンペーン実施中

 

Sprouts 非公式DiscordにRain機能が実装?【仮想通貨SPRTS】

皆さんどうもSysnetことfainalです。

今回は、SproutsについにRain機能のような機能が実装されたとのことで、そのレビューと使い方を最速で解説しようかなと思います。半公式みたいなものですが、他のブロガ―さんに負けませんよ((

 

というわけで、SproutsのDiscordに入ってない方は下記リンクから入ってください。

https://discord.gg/pZhtPTS

 

 

では、説明を始めていきます!

まず、一通り#bot-guideline欄に目を通してください。

基本的にもやしを失っても自己責任だぞいって事とあくまで海外法人のツール提供を受けてるだけぞいって言うのを確認します。

それを確認さえすれば、japanese-chat欄で何も考えずに「!開園」(「」は書かないでください)と入力します。

すると、もやたすから開園した旨のメッセージが送られてきますので、後は!ヘルプでヘルプを確認するなりもう一度Guideline欄を確認するなりでコマンド一覧を確認し、お好きなコマンドを実行してください!

 

又、Discordの自分のWalletにもやしをおくりたい場合、!もやたす で表示されるアドレスに送金していただければ暫くすると到着すると思います!

 

感想ですが、まぁ、内部側の感想になりますが....

もやたすちゃんの可愛い姿を見たいなら一杯水やりしてあげればいいと思うよというアドバイスをしておきますw(ちなみに水やり上限は9999ではないです。もっと送れます)

 

 

簡単なQ&A集

Q:!開園 ってしても開園されないんですが....

A:!と開園の間にスペースが空いていないか、!が全角になっているかを確認してください。

Q:スマホでも出来るの?

A:はい、もちろんです!

SproutsがCoinExchange以外に上場!?是非投票して上場させるんだ!【SPRTS】

SproutsがCoinExchange以外に上場する可能性がありそうです。

現在、以下のリンクでは投票を行っており、Sproutsはたったの17票しか入っていません。

投票方法を説明しますのでぜひ投票しましょう!

 

まず、下のURLから投票ページにアクセスします。

https://orionx.canny.io/nuevas-criptomonedas/p/sprouts

 

するとしたのような画像が出てくると思いますので、画面右上にある『LOG IN / SIGN UP』をクリックしてください。

f:id:Sysnet:20180129235015p:plain

 

そうするとSNSのマークと右にメールのマークが出てくると思いますのでお好きなものでログインorサインアップできます。

 

そして、ログインが終わると先程の画面に戻されると思いますので、△17と画像で描かれている部分をクリックして投票は終了です。

 

簡単ですので是非やって下さい!

そしてこの記事を広めて頂ければ幸いです!

分からないことがあればコメントかDiscordかTwitterで書いていただければ反応できるときはします。