Discord. net Зависимость не найдена - PullRequest
0 голосов
/ 23 января 2020

Я нашел только один пост, у которого была похожая проблема, но их проблема заключалась в том, что они забыли передать службу методу AddModulesAsync(). Когда я запускаю своего бота, он выдает InvalidOperationException

System.InvalidOperationException
HResult=0x80131509
Message=Failed to create "CraigTheBot.Bot.Objects.Item", dependency "String" was not found.

(остальная часть ошибки относится только к основному классу, куда не удалось загрузить модуль)

Класс, который не может получить загружен вот такой:

public class Item : ModuleBase
{
    public string ID { get; set; }
    public string Name { get; set; }
    public long Price { get; set; }
    public string Command { get; set; }
    public string ServerID { get; set; }
    public string Description { get; set; }
    public string MinRank { get; set; }

    public static List<Item> GetItemsFromServer(string ServerID)
    {
        var database = DBConnector.Instance;

        DataTable table = database.GetDBObjects($"SELECT * FROM Item WHERE ServerID = {ServerID}");

        var itemList = table.AsEnumerable().Select(row =>
                new Item
                {
                    ID = row.Field<string>("ItemID"),
                    Name = row.Field<string>("ItemName"),
                    Price = row.Field<long>("Price"),
                    Command = row.Field<string>("CommandOnUse"),
                    ServerID = row.Field<string>("ServerID"),
                    MinRank = row.Field<string>("RankRequired")
                }).ToList();
        return itemList;
    }

    private static Random random = new Random();
    public static string RandomString(int length)
    {
        const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        return new string(Enumerable.Repeat(chars, length)
          .Select(s => s[random.Next(s.Length)]).ToArray());
    }

    [Command("Item create")]
    public async Task CreateItem(params string[] args)
    {
        var db = DBConnector.Instance;

        Item item = new Item();

        foreach (var str in args)
        {
            var prop = str.Split(':');
            var propName = prop[0].ToLower();
            var propValue = prop[1].ToLower();

            while (true)
            {
                string ID = RandomString(10);

                if (db.GetDBData($"SELECT ItemID FROM Item WHERE ItemID = {ID}").Count == 0)
                {
                    item.ID = ID;
                    break;
                }
            }

            switch (propName)
            {
                case "name":
                    item.Name = propValue;
                    break;
                case "description":
                    item.Description = propValue;
                    break;
                case "command":
                    item.Command = propValue;
                    break;
                case "price":
                    try
                    {
                        item.Price = Convert.ToInt64(propValue);
                    }
                    catch (Exception)
                    {
                        item = null;
                        Craig.Instance.Say("I'm sorry, this is not a whole number", Context.Channel);
                    }
                    break;
                case "minrank":
                    item.MinRank = propValue;
                    break;
            }
        }

        db.ExecuteCommand($"INSERT INTO Item (ItemID, ItemName, Price, CommandOnUse, RankRequired, ServerID, Description) VALUES ({item.ID}, {item.Name}, {item.Price}, {item.Command}, {item.MinRank}, {Context.Guild.Id.ToString()}, {item.Description})");

        Craig.Instance.Say($"Item {item.Name} successfully added.", Context.Channel);
    }
}

Но я не знаю, к какой "строке" относится сообщение об ошибке.

Редактировать: Я все еще не нашел ошибку, но у меня есть разделить класс на Item и ItemModule, по крайней мере, теперь он работает

...