実現
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に暗黙的に変換できません
と表示されます。。
よろしくお願いします---
回答1件
あなたの回答
tips
プレビュー