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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2417閲覧

discord.net で文章中にある単語に当てはまったら、”hello”とボットに言わせたい。

ichima_sann

総合スコア2

Discord

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2021/06/13 03:03

編集2021/06/13 03:37

実現

C#初心者です。
*discord.net で文章中にある単語に当てはまったら、”hello”とボットに言わせたい。


「こんにちは」と言っても、helloと言う。
「こんにちは~いい天気ですね。」と言っても”こんにちは”という単語があるので、helloと言う。

*色々な選択(if)でも実行できるようにしたい。
(例えば「こんにちは」(単語)と言ったら、”hello" 「おやすみ」(単語)と言ったら、”good" と言ったり)

問題のソースコード

C#

1using System; 2using System.Reflection; 3using System.Threading.Tasks; 4using Discord; 5using Discord.Commands; 6using Discord.WebSocket; 7using Microsoft.Extensions.DependencyInjection; 8using System.Text; 9using Serilog; 10 11 12namespace TestHoge 13{ 14 15 class Program 16 { 17 18 private DiscordSocketClient _client; 19 public static CommandService _commands; 20 public static IServiceProvider _services; 21 22 static void Main(string[] args) 23 => new Program().MainAsync().GetAwaiter().GetResult(); 24 private async Task MessageReceivedAsync(SocketMessage message) 25 { 26 // The bot should never respond to itself. 27 if (message.Author.Id == _client.CurrentUser.Id) 28 return; 29 30 if (message.Content == "!ping") 31 await message.Channel.SendMessageAsync("pong!"); 32 } 33 public async Task MainAsync() 34 { 35 _client = new DiscordSocketClient(new DiscordSocketConfig 36 { 37 LogLevel = LogSeverity.Info 38 }); 39 _client.Log += Log; 40 _commands = new CommandService(); 41 _services = new ServiceCollection().BuildServiceProvider(); 42 _client.MessageReceived += CommandRecieved; 43 44 //次の行に書かれているstring token = "hoge"に先程取得したDiscordTokenを指定する。 45 string token = "(トークンです。)"; 46 47 await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services); 48 await _client.LoginAsync(TokenType.Bot, token); 49 await _client.StartAsync(); 50 await Task.Delay(-1); 51 } 52 /// <summary> 53 /// 何かしらのメッセージの受信 54 /// </summary> 55 /// <param name="msgParam"></param> 56 /// <returns></returns> 57 private async Task CommandRecieved(SocketMessage messageParam) 58 { 59 var message = messageParam as SocketUserMessage; 60 //デバッグ用メッセージを出力 61 Console.WriteLine("{0} {1}:{2}", message.Channel.Name, message.Author.Username, message); 62 //メッセージがnullの場合 63 if (message == null) 64 return; 65 //発言者がBotの場合無視する 66 if (message.Author.IsBot) 67 return; 68 var context = new CommandContext(_client, message); 69 //ここから記述-------------------------------------------------------------------------- 70 var CommandContext = message.Content; 71 72 string str = CommandContext; 73 74 bool ans = Console.WriteLine(str.Contains("こんにちは")); 75 76 if (ans == true) 77 { 78 await message.Channel.SendMessageAsync("hello"); 79 } 80 81 var CommandContext = message.Content; 82 83 string str1 = CommandContext; 84 85 bool ans = Console.WriteLine(str1.Contains("おやすみ")); 86 if (ans == true) 87 { 88 await message.Channel.SendMessageAsync("good"); 89 }

試したこと

https://www.atmarkit.co.jp/ait/articles/0602/17/news119.html
こちらの記事を参考にしました。
str変数に打ったやつ(こんいちは)を入れて、
「こんにちは」の単語があったらしていたらTRUE
その結果を、ansに入れてifで、正しかったら hello goodを表示。しようと思ってた。
(エラーが出ます)

追記

ヴィジュアルスタジオで、やっていて波線でエラーが出ます
bool ans = Console.WriteLine(str.Contains("こんにちは”)のところは
型”void"をboolに暗黙的に変換できません

と表示されます。。
よろしくお願いします---

coolwind0202👍を押しています

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

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

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

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

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

coolwind0202

2021/06/13 03:12

エラーが出ます、と言われても・・・ 出力されたエラーを貼り付けないとその情報は解決には役立たないですよ
ichima_sann

2021/06/13 03:17

すみません。。 補足します。
ichima_sann

2021/06/13 03:31

補足しました。 初歩的なエラー内容ですみません。
guest

回答1

0

ベストアンサー

C#

1bool ans = Console.WriteLine(str.Contains("こんにちは"));

Console.WriteLine メソッドの戻り値はリファレンスにある通りvoidで戻り値はありません。
なのにansに代入しようとしてエラーとなっていると思われます。
(エラーの出る箇所やエラーメッセージが提示されていないので想像です)

投稿2021/06/13 03:20

YAmaGNZ

総合スコア10258

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

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

ichima_sann

2021/06/13 03:51

ありがとうございます。
ichima_sann

2021/06/13 03:53

string str = CommandContext; string target = "おはよう"; if (str.Contains(target)) { await message.Channel.SendMessageAsync("おはようございます! 張り切っていこう!!"); } でいけました!! ありがとうございました! YAmaGNZさん!!あなたは神様です!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問