2017-12-04 15 views
0
package me.mizoo.bot; 

import javax.security.auth.login.LoginException; 
import net.dv8tion.jda.core.AccountType; 
import net.dv8tion.jda.core.JDA; 
import net.dv8tion.jda.core.JDABuilder; 
import net.dv8tion.jda.core.entities.Message; 
import net.dv8tion.jda.core.entities.MessageChannel; 
import net.dv8tion.jda.core.entities.User; 
import net.dv8tion.jda.core.events.message.MessageReceivedEvent; 
import net.dv8tion.jda.core.exceptions.RateLimitedException; 
import net.dv8tion.jda.core.hooks.ListenerAdapter; 

import java.util.ArrayList; 

public class Main extends ListenerAdapter 
{ 
public static void main(String[] args) throws LoginException, IllegalArgumentException, InterruptedException, RateLimitedException 
{ 

    //Initializes the bot 
    JDA jdaBot = new JDABuilder(AccountType.BOT).setToken("**********************************").buildBlocking(); 
    jdaBot.addEventListener(new Main()); 

} 

@Override 
public void onMessageReceived(MessageReceivedEvent e) 
{ 
    ArrayList<String> adminsOn = new ArrayList<String>(); 

    Message msg = e.getMessage(); 
    MessageChannel channel = e.getChannel(); 
    User user = e.getAuthor(); 

    if(msg.getContent().equalsIgnoreCase("$.readytoban")) 
    { 
     String name = msg.getAuthor().getName(); 
     adminsOn.add(name); 
     channel.sendMessage("You're added to the list of admins ready to BAN!").queue(); 

    } 

    else if(msg.getContent().equalsIgnoreCase("$.readytoleave")) 
    { 
     String name = msg.getAuthor().getName(); 
     adminsOn.remove(name); 
     channel.sendMessage("You're off it, pal. Bye!").queue(); 
    } 


    if (msg.getContent().equalsIgnoreCase(".$adminson")) 
    { 
     channel.sendMessage("Here are the admins on: " + adminsOn).queue(); 
    } 

    } 
} 

これは私のJavaコードで、JDAライブラリを使用しています。私はreadytobanコマンドを入力するたびに、この管理者のリストに追加され、readytoleaveはそれらを削除するようにしたいと思います。これは正常に動作しますが、動作しません。 readytobanコマンドを入力してからadminsonと入力すると、アレイ内に名前は表示されません。修正?java - ArrayListの問題

+0

リストはローカルにあるようですが、代わりにクラスフィールドを作成するとどうなりますか? – phflack

+0

上記を読んで、これは同じ問題が2回目の記事であり、onMessageReceivedが呼び出されるたびに新しいArrayListが作成されるので、あなたのものは保存されません。 – prsvr

+0

タイトルが不十分です。あなたの問題について具体的に編集する。 –

答えて

0

問題は、イベントが発生するたびに新しいリストを初期化することです。リストをフィールドとして設定する必要があります。

private ArrayList<String> adminsOn = new ArrayList<String>(); 
@Override 
public void onMessageReceived(MessageReceivedEvent e) 
{ 
    Message msg = e.getMessage(); 
    MessageChannel channel = e.getChannel(); 
    User user = e.getAuthor(); 

    if(msg.getContent().equalsIgnoreCase("$.readytoban")) 
    { 
     String name = msg.getAuthor().getName(); 
     adminsOn.add(name); 
     channel.sendMessage("You're added to the list of admins ready to BAN!").queue(); 

    } 

    else if(msg.getContent().equalsIgnoreCase("$.readytoleave")) 
    { 
     String name = msg.getAuthor().getName(); 
     adminsOn.remove(name); 
     channel.sendMessage("You're off it, pal. Bye!").queue(); 
    } 


    if (msg.getContent().equalsIgnoreCase(".$adminson")) 
    { 
     channel.sendMessage("Here are the admins on: " + adminsOn).queue(); 
    } 

}