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

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

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

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

Python

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

Q&A

解決済

1回答

726閲覧

[Python] DiscordのBot作りで、1コマンドにつき2つメッセージを送りたいです

ririripon

総合スコア2

Discord

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

Python

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

0グッド

0クリップ

投稿2021/11/12 13:33

編集2021/11/12 13:41

前提・実現したいこと

PythonでDiscordBot作ってます。1コマンドで2つテキストメッセージを送りたいです。

発生している問題・エラーメッセージ

Discordのチャットにて
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "discordbot.py", line 43, in allrandom7
await ctx.send(df.iloc[r,0])
File "/app/.heroku/python/lib/python3.8/site-packages/pandas/core/indexing.py", line 925, in getitem
return self._getitem_tuple(key)
File "/app/.heroku/python/lib/python3.8/site-packages/pandas/core/indexing.py", line 1506, in _getitem_tuple
self._has_valid_tuple(tup)
File "/app/.heroku/python/lib/python3.8/site-packages/pandas/core/indexing.py", line 754, in _has_valid_tuple
self._validate_key(k, i)
File "/app/.heroku/python/lib/python3.8/site-packages/pandas/core/indexing.py", line 1409, in _validate_key
self._validate_integer(key, axis)
File "/app/.heroku/python/lib/python3.8/site-packages/pandas/core/indexing.py", line 1500, in _validate_integer
raise IndexError("single positional indexer is out-of-bounds")
IndexError: single positional indexer is out-of-bounds

該当のソースコード

import pandas
from discord.ext import commands
from os import getenv
import traceback
import random
import csv
import time

example = random.randint(0,1900)

df = pandas.read_csv('word4.csv', encoding = 'utf-8')
num = 0

bot = commands.Bot(command_prefix='/')

@bot.event
async def on_command_error(ctx, error):
orig_error = getattr(error, "original", error)
error_msg = ''.join(traceback.TracebackException.from_exception(orig_error).format())
await ctx.send(error_msg)

@bot.command()
async def ping(ctx):
time.sleep(10)
await ctx.send(s)

@bot.command()
async def allrandom7(ctx):
for num in range(10):
r = random.randint(1,1900)
await ctx.send(df.iloc[r,0])
time.sleep(7)
await ctx.send(df.iloc[r,1])  ##ここでエラー!!!!
time.sleep(7)

token = getenv('DISCORD_BOT_TOKEN')
bot.run(token)

試したこと

エラーが起きているawait ctx.send(df.iloc[r,1])を消すと、うまく動作します

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

IndexError: single positional indexer is out-of-boundsというのは「インデックスが領域外だよ」というエラーです。
df.ilocで存在しない要素にアクセスしようとして発生しているエラーではないでしょうか。

「どんなデータを読み込んでいるのか」がわからないのでなんとも言えませんが、r = random.randint(1, 1900)としているところがとても気になります。
読み込んだファイルに1900以上の要素がなければ上述のエラーになる可能性がありますので……

投稿2021/11/12 17:43

fj68

総合スコア752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ririripon

2021/11/13 00:45

CSVデータが900あって、乱数を出して、900のうちから1個ピックアップしてディスコードにsendするという流れを組んでました。 乱数の幅は900が最大にしないといけませんでした汗 おっしゃる通りでした。 しかし、それだけではエラーは止まりませんでした。結局、コメントアウトしている部分や余分な空白を消したら治りました!! ご協力いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問