Я рекомендую проверить https://discordpy.readthedocs.io/en/latest/ext/commands/cogs.html Это поможет вам лучше понять Cogs.
Во-первых, вам нужно изменить bot.add_cog("cogs.fun")
на bot.load_extension("cogs.fun")
В этом нет необходимости, но вам не нужно снова определять bot
. Измените def setup(bot: commands.Bot):
на def setup(bot):
Вам также необходимо изменить class FunCog:
на class FunCog(commands.Cog):
Я рекомендую быть в курсе изменений, когда появляются новые обновления для версии перезаписи , Вот краткий обзор примера рабочего файла cog. . Надеюсь, это помогло! Макс.
Ага, оказалось, что теория в моей редакции была правильной: проблема, из-за которой метод onCreate не запускался, заключалась в том, что объекты SQLiteOpenHelper
должны ссылаться на базы данных , а не иметь отдельную таблицу для каждой таблицы. Упаковка обеих таблиц в одну SQLiteOpenHelper
решила проблему.
я столкнулся с этим и соглашением с ним выгодой попытки, столь же простой как это, я делаю то, что я хочу в таблице, если это не будет существовать, то вызовет ошибку, так поймайте его исключениями и создайте его :)
SQLiteDatabase db=this.getWritableDatabase();
try{
db.execSQL("INSERT INTO o_vacations SELECT * FROM vacations");
db.execSQL("DELETE FROM vacations");
}catch (SQLiteException e){
db.execSQL("create table o_vacations (id integer primary key ,name text ,vacation text,date text,MONTH text)");
db.execSQL("INSERT INTO o_vacations SELECT * FROM vacations");
db.execSQL("DELETE FROM vacations");
}
Вы упомянули, что создали класс, расширяющий SQLiteOpenHelper
, и реализовали метод onCreate
. Вы уверены, что выполняете все вызовы получения базы данных с этим классом? Вы должны получать только объекты SQLiteDatabase
с помощью SQLiteOpenHelper # getWritableDatabase
и getReadableDatabase
, иначе метод onCreate
не будет вызываться при необходимости. Если вы уже это делаете, проверьте, не вызывается ли вместо этого метод SQLiteOpenHelper # onUpgrade
. Если это так, то номер версии базы данных был изменен в какой-то момент времени, но таблица никогда не была создана должным образом, когда это произошло.
Кроме того, вы можете принудительно воссоздать базу данных, убедившись, что все подключения к ней закрыты и вызывая Context # deleteDatabase
, а затем используя SQLiteOpenHelper
, чтобы дать вам новый объект db.
Я ничего не знаю об Android SQLite API, но если вы в состоянии говорить с ним на SQL напрямую, вы можете сделать следующее:
create table if not exists mytable (col1 type, col2 type);
Что обеспечит постоянное создание таблицы и не будет выбрасывать никаких ошибок, если она уже существовала.