質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

pythonを使ったDiscord人工知能Bot作成時のエラー

TESTMAN
TESTMAN

総合スコア0

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

-2評価

0クリップ

282閲覧

投稿2022/04/18 11:50

編集2022/04/21 07:00

3年前くらい前にコピペで作成したものを掘り起こして遊びたいと思ったものの

discordbot.py

import discord import os, re, json, random from janome.tokenizer import Tokenizer dict_file = "chatbot-data.json" dic = {} tokenizer = Tokenizer() if os.path.exists(dict_file): dic = json.load(open(dict_file, "r")) def register_dic(words): global dic if len(words) == 0: return tmp = ["@"] for i in words: word = i.surface if word == "" or word == "\r\n" or word == "\n": continue tmp.append(word) if len(tmp) < 3: continue if len(tmp) > 3: tmp = tmp[1:] set_word3(dic, tmp) if word == "。" or word == "?": tmp = ["@"] continue #辞書更新毎にファイル保存 f = open(dict_file, "w", encoding="utf-8") json.dump(dic, f) def set_word3(dic, s3): w1, w2, w3 = s3 if not w1 in dic: dic[w1] = {} if not w2 in dic[w1]: dic[w1][w2] = {} if not w3 in dic[w1][w2]: dic[w1][w2][w3] = 0 dic[w1][w2][w3] += 1 def make_sentence(head): if not head in dic: return "" ret = [] if head != "@": ret.append(head) top = dic[head] w1 = word_choice(top) w2 = word_choice(top[w1]) ret.append(w1) ret.append(w2) while True: if w1 in dic and w2 in dic[w1]: w3 = word_choice(dic[w1][w2]) else: w3 = "" ret.append(w3) if w3 == "。" or w3 == "?" or w3 == "": break w1, w2 = w2, w3 return "".join(ret) def word_choice(sel): keys = sel.keys() return random.choice(list(keys)) # botに返答させる def make_reply(text): # まず単語を学習する if text[-1] != "。": text += "。" words = tokenizer.tokenize(text) register_dic(words) # 辞書に単語があれば、そこから話す for w in words: face = w.surface ps = w.part_of_speech.split(',')[0] if ps == "感動詞": return face + "。" if ps == "名詞" or ps == "形容詞": if face in dic: return make_sentence(face) return make_sentence("@") #ここからメッセージ取得&返信 # # #以下、discord処理 # # client = discord.Client() @client.event async def on_ready(): print('Logged in as') print(client.user.name) print(client.user.id) print('------') @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('#DISCORDTOKEN#')

error

------ Ignoring exception in on_message Traceback (most recent call last): File "/home/hage/.local/lib/python3.9/site-packages/discord/client.py", line 343, in _run_event await coro(*args, **kwargs) File "/home/hage/github/discordbot/discordbot.py", line 113, in on_message res = make_reply(text) File "/home/hage/github/discordbot/discordbot.py", line 72, in make_reply register_dic(words) File "/home/hage/github/discordbot/discordbot.py", line 17, in register_dic if len(words) == 0: return TypeError: object of type 'generator' has no len()

エラーが出てお手上げ状態です。
すみませんがご教授願います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Supernove

2022/04/18 12:43

エラーメッセージって本当にこれだけですか? if len(words) == 0: return 以降のメッセージがどんなエラーなのか書いていいるはずです
TESTMAN

2022/04/18 14:47

欠落していました。すみません。 追記いたしました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。