v0.2
This commit is contained in:
parent
fb8771109a
commit
e02402a394
101
bot.js
101
bot.js
@ -107,7 +107,9 @@ bot.use(async (ctx, next) => {
|
|||||||
console.log(ctx)
|
console.log(ctx)
|
||||||
}
|
}
|
||||||
let user = await UserModel.findByPk(id);
|
let user = await UserModel.findByPk(id);
|
||||||
let block = await BlockModel.findByPk(id);
|
let block = await BlockModel.findOne({
|
||||||
|
where: { telegram_id: id }, // Здесь id — это значение telegram_id, переданное в функцию
|
||||||
|
});
|
||||||
let property = await PropertyModel.findByPk(id);
|
let property = await PropertyModel.findByPk(id);
|
||||||
let skill = await SkillsModel.findByPk(ctx.from.id)
|
let skill = await SkillsModel.findByPk(ctx.from.id)
|
||||||
if (!user) ctx.reply(`❕ Первичная регистрация профиля.`);
|
if (!user) ctx.reply(`❕ Первичная регистрация профиля.`);
|
||||||
@ -137,11 +139,21 @@ bot.use(async (ctx, next) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
//if (whitelist.includes(id) == false) return ctx.reply(`У вас пока нет доступа к боту. Следите за обновлениями в группе: t.me/CampFireGameBotNews`)
|
//if (whitelist.includes(id) == false) return ctx.reply(`У вас пока нет доступа к боту. Следите за обновлениями в группе: t.me/CampFireGameBotNews`)
|
||||||
if (block !== null) {
|
if (block) {
|
||||||
if (block.isBlocked == true && block.time > Date.now() / 1000) return ctx.reply(`📛 У вас активная блокировка по причине: ${block.reason}.\n⏲️ Оставшееся время: ${Math.trunc((block.time - Date.now()/1000)/60)} мин.`)
|
const currentTime = Math.trunc(Date.now() / 1000); // Получаем текущее время в секундах
|
||||||
block.isBlocked = false
|
|
||||||
block.save()
|
if (block.isBlocked && block.time > currentTime) {
|
||||||
|
const remainingTime = Math.trunc((block.time - currentTime) / 60); // Рассчитываем оставшееся время
|
||||||
|
return ctx.reply(
|
||||||
|
`📛 У вас активная блокировка по причине: ${block.reason}.\n⏲️ Оставшееся время: ${remainingTime} мин.`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Если блокировка истекла или отключена
|
||||||
|
block.isBlocked = false;
|
||||||
|
await block.save(); // Обязательно используем `await` для сохранения изменений
|
||||||
|
}
|
||||||
|
|
||||||
const start = Date.now()
|
const start = Date.now()
|
||||||
const timeoutPromise = new Promise((resolve, reject) => {
|
const timeoutPromise = new Promise((resolve, reject) => {
|
||||||
|
|
||||||
@ -466,7 +478,7 @@ bot.action('my_enterprises', async (ctx) => {
|
|||||||
const resourcePrice = await ResourcePriceModel.findOne({
|
const resourcePrice = await ResourcePriceModel.findOne({
|
||||||
where: { resource: resourceType }
|
where: { resource: resourceType }
|
||||||
});
|
});
|
||||||
let price = resourcePrice.price * 2 * 10 * 24 * 7 // Стоимость улучшения зависит от уровня
|
let price = resourcePrice.price * 1.5 * 10 * 24 * 7 // Стоимость улучшения зависит от уровня
|
||||||
message += `🔹 [ID: ${id}] ${getEnterpriseEmoji(resourceType)} ${name} st. ${level}\n └── ${currentResources}/${warehouseCapacity} [${efficiency} ед/ч]\n └──📈 ${utils.spaces(price)} руб.\n\n`;
|
message += `🔹 [ID: ${id}] ${getEnterpriseEmoji(resourceType)} ${name} st. ${level}\n └── ${currentResources}/${warehouseCapacity} [${efficiency} ед/ч]\n └──📈 ${utils.spaces(price)} руб.\n\n`;
|
||||||
const truck = await TruckModel.findOne({ where: { enterpriseId: id } });
|
const truck = await TruckModel.findOne({ where: { enterpriseId: id } });
|
||||||
const warehouse = await WarehouseModel.findOne({ where: { playerId: user.telegram_id } });
|
const warehouse = await WarehouseModel.findOne({ where: { playerId: user.telegram_id } });
|
||||||
@ -523,7 +535,7 @@ bot.action('build_enterprise', async (ctx) => {
|
|||||||
for (const resource of resourcePrices) {
|
for (const resource of resourcePrices) {
|
||||||
const resourceName = getReadableType(resource.resource);
|
const resourceName = getReadableType(resource.resource);
|
||||||
const resourceEmoji = getEnterpriseEmoji(resource.resource);
|
const resourceEmoji = getEnterpriseEmoji(resource.resource);
|
||||||
message += `${resourceEmoji} ${resourceName}: ${utils.spaces(Math.round(resource.price * 2 * 10 * 24 * 7))} руб.\n`;
|
message += `${resourceEmoji} ${resourceName}: ${utils.spaces(Math.round(resource.price * 1.5 * 10 * 24 * 7))} руб.\n`;
|
||||||
|
|
||||||
// Генерируем кнопки для каждого ресурса
|
// Генерируем кнопки для каждого ресурса
|
||||||
buttons.push([
|
buttons.push([
|
||||||
@ -551,7 +563,7 @@ bot.action(/build_(wood|coal|oil|metall|gold|diamond)/, async (ctx) => {
|
|||||||
const resourcePrice = await ResourcePriceModel.findOne({
|
const resourcePrice = await ResourcePriceModel.findOne({
|
||||||
where: { resource: type }
|
where: { resource: type }
|
||||||
});
|
});
|
||||||
let price = resourcePrice.price * 2 * 10 * 24 * 7
|
let price = resourcePrice.price * 1.5 * 10 * 24 * 7
|
||||||
|
|
||||||
// Проверка, есть ли достаточно денег у пользователя
|
// Проверка, есть ли достаточно денег у пользователя
|
||||||
if (user.money < price) {
|
if (user.money < price) {
|
||||||
@ -774,7 +786,7 @@ bot.action(/upgrade_(\d+)/, async (ctx) => {
|
|||||||
const resourcePrice = await ResourcePriceModel.findOne({
|
const resourcePrice = await ResourcePriceModel.findOne({
|
||||||
where: { resource: enterprise.resourceType }
|
where: { resource: enterprise.resourceType }
|
||||||
});
|
});
|
||||||
let upgradeCost = resourcePrice.price * 2 * 10 * 24 * 7 // Стоимость улучшения зависит от уровня
|
let upgradeCost = resourcePrice.price * 1.5 * 10 * 24 * 7 // Стоимость улучшения зависит от уровня
|
||||||
if (user.money < upgradeCost) {
|
if (user.money < upgradeCost) {
|
||||||
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас недостаточно средств для прокачки предприятия. Необходимо ${upgradeCost} руб.`)
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас недостаточно средств для прокачки предприятия. Необходимо ${upgradeCost} руб.`)
|
||||||
}
|
}
|
||||||
@ -1308,6 +1320,10 @@ bot.command('force_hour', async (ctx) => {
|
|||||||
return await ctx.reply(`Принудительный час.`)
|
return await ctx.reply(`Принудительный час.`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
bot.command('force_mat', async (ctx) => {
|
||||||
|
utils.matPriceUpdate()
|
||||||
|
return await ctx.reply(`Принудительный материал.`)
|
||||||
|
})
|
||||||
/////////////////////////////////////Enterprise Update end//////////////////////////////////////////////////
|
/////////////////////////////////////Enterprise Update end//////////////////////////////////////////////////
|
||||||
|
|
||||||
/////////////////////////////////////Admin Commands//////////////////////////////////////////////////
|
/////////////////////////////////////Admin Commands//////////////////////////////////////////////////
|
||||||
@ -1323,16 +1339,63 @@ bot.command('genpromo', commands.genPromo)
|
|||||||
|
|
||||||
bot.command('ban', async (ctx) => {
|
bot.command('ban', async (ctx) => {
|
||||||
const user = await UserModel.findByPk(ctx.from.id);
|
const user = await UserModel.findByPk(ctx.from.id);
|
||||||
const [blocked] = ctx.message.text.split(' ').slice(1);
|
|
||||||
if(user.status != 'admin') return await ctx.reply(`Admin Only.`)
|
// Проверка прав администратора
|
||||||
await BlockModel.create({
|
if (user.status !== 'admin') {
|
||||||
telegram_id: blocked,
|
return await ctx.reply(`❌ У вас нет прав для выполнения этой команды.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Разбор аргументов команды
|
||||||
|
const args = ctx.message.text.split(' ').slice(1);
|
||||||
|
if (args.length < 3) {
|
||||||
|
return await ctx.reply(`⚠️ Использование: /ban <ID|username> <время в минутах> <причина>.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const identifier = args[0]; // ID или username пользователя
|
||||||
|
const blockTimeMinutes = parseInt(args[1], 10); // Время блокировки в минутах
|
||||||
|
const reason = args.slice(2).join(' '); // Причина блокировки
|
||||||
|
|
||||||
|
// Проверка времени блокировки
|
||||||
|
if (isNaN(blockTimeMinutes) || blockTimeMinutes <= 0) {
|
||||||
|
return await ctx.reply(`❌ Укажите корректное время блокировки в минутах.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ищем пользователя по Telegram ID или никнейму
|
||||||
|
let targetUser;
|
||||||
|
if (identifier.startsWith('@')) {
|
||||||
|
// Если передан username
|
||||||
|
targetUser = await UserModel.findOne({ where: { username: identifier.slice(1) } });
|
||||||
|
} else {
|
||||||
|
// Если передан Telegram ID
|
||||||
|
targetUser = await UserModel.findOne({ where: { telegram_id: identifier } });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!targetUser) {
|
||||||
|
return await ctx.reply(`❌ Пользователь с идентификатором "${identifier}" не найден.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создаём запись о блокировке
|
||||||
|
const block = await BlockModel.create({
|
||||||
|
telegram_id: targetUser.telegram_id,
|
||||||
isBlocked: true,
|
isBlocked: true,
|
||||||
reason: `|AutoFastBlock|`,
|
reason: reason,
|
||||||
time: Math.trunc(Date.now() / 1000 + 3600)
|
time: Math.trunc(Date.now() / 1000 + blockTimeMinutes * 60) // Время блокировки в секундах
|
||||||
})
|
});
|
||||||
await bot.telegram.sendMessage(blocked, `Вы были заблокированы администратором ${user.username}.`)
|
|
||||||
return await ctx.reply(`Пользователь заблокирован.`)
|
// Уведомляем заблокированного пользователя
|
||||||
|
try {
|
||||||
|
await bot.telegram.sendMessage(
|
||||||
|
targetUser.telegram_id,
|
||||||
|
`❌ Вы были заблокированы администратором ${user.username}.\nПричина: ${reason}\nСрок: ${blockTimeMinutes} минут(ы).`
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Ошибка отправки уведомления пользователю ${targetUser.telegram_id}:`, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Уведомляем администратора
|
||||||
|
return await ctx.reply(
|
||||||
|
`✅ Пользователь ${targetUser.username || targetUser.telegram_id} был успешно заблокирован.\nПричина: ${reason}\nСрок: ${blockTimeMinutes} минут(ы).`
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
///////////////////////////////////////Functions//////////////////////////////////////////////////////
|
///////////////////////////////////////Functions//////////////////////////////////////////////////////
|
||||||
@ -1342,7 +1405,7 @@ setInterval(() => {
|
|||||||
let hours = today.getHours();
|
let hours = today.getHours();
|
||||||
if (hours == "0" || hours == "12") {
|
if (hours == "0" || hours == "12") {
|
||||||
//weaponShopUpdate()
|
//weaponShopUpdate()
|
||||||
//matPriceUpdate()
|
matPriceUpdate()
|
||||||
}
|
}
|
||||||
/*if (hours == "9" || hours == "18" || hours == "12") {
|
/*if (hours == "9" || hours == "18" || hours == "12") {
|
||||||
generatePromo()
|
generatePromo()
|
||||||
|
@ -28,8 +28,6 @@ module.exports = async (ctx) => {
|
|||||||
let percentErrorText = ``
|
let percentErrorText = ``
|
||||||
let profit = 0
|
let profit = 0
|
||||||
let piece = 0
|
let piece = 0
|
||||||
let moneyList = rand(1000, 3000)
|
|
||||||
moneyList = moneyList*business.users.length
|
|
||||||
for (i = 0; i < business.users.length; i++) { // Summary percent
|
for (i = 0; i < business.users.length; i++) { // Summary percent
|
||||||
user = await UserModel.findByPk(business.users[i])
|
user = await UserModel.findByPk(business.users[i])
|
||||||
percentSum += Number(user.business.percent)
|
percentSum += Number(user.business.percent)
|
||||||
@ -38,7 +36,7 @@ module.exports = async (ctx) => {
|
|||||||
if (percentSum > 100) return await ctx.reply(`⚠️ Общий процент всех сотрудников превышает 100%\n ➕ Остаток процентов перенесется в баланс организации.\n\n${percentErrorText}\n`)
|
if (percentSum > 100) return await ctx.reply(`⚠️ Общий процент всех сотрудников превышает 100%\n ➕ Остаток процентов перенесется в баланс организации.\n\n${percentErrorText}\n`)
|
||||||
for (x = 0; x < business.users.length; x++) { // Общая внесенная сумма всеми участниками
|
for (x = 0; x < business.users.length; x++) { // Общая внесенная сумма всеми участниками
|
||||||
user = await UserModel.findByPk(business.users[x])
|
user = await UserModel.findByPk(business.users[x])
|
||||||
profit += user.business.checks * moneyList * user.level
|
profit += user.business.checks * world.matPrice * 10 * user.level
|
||||||
text += `ℹ️ ${user.username} отработал ${user.business.checks} раз.\n`
|
text += `ℹ️ ${user.username} отработал ${user.business.checks} раз.\n`
|
||||||
user.business = {
|
user.business = {
|
||||||
id: user.business.id,
|
id: user.business.id,
|
||||||
|
@ -2,10 +2,22 @@ const sequelize = require('../db');
|
|||||||
const {DataTypes} = require('sequelize');
|
const {DataTypes} = require('sequelize');
|
||||||
|
|
||||||
const Block = sequelize.define('block', {
|
const Block = sequelize.define('block', {
|
||||||
telegram_id: {type: DataTypes.BIGINT, primaryKey: true, unique: true}, uid: {type: DataTypes.STRING, unique: true},
|
telegram_id: {
|
||||||
isBlocked: {type: DataTypes.BOOLEAN, defaultValue: false},
|
type: DataTypes.BIGINT,
|
||||||
reason: {type: DataTypes.STRING, defaultValue: "Не указана."},
|
allowNull: false,
|
||||||
time: {type: DataTypes.INTEGER, defaultValue: 0}
|
},
|
||||||
|
isBlocked: {
|
||||||
|
type: DataTypes.BOOLEAN,
|
||||||
|
defaultValue: true,
|
||||||
|
},
|
||||||
|
reason: {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
time: {
|
||||||
|
type: DataTypes.BIGINT, // UNIX-время окончания блокировки
|
||||||
|
allowNull: false,
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exports = Block;
|
module.exports = Block;
|
||||||
|
@ -1,11 +1,28 @@
|
|||||||
const rand = require('./rand')
|
const rand = require('./rand')
|
||||||
const {
|
const {
|
||||||
WorldModel
|
WorldModel,
|
||||||
|
ResourcePriceModel
|
||||||
} = global.config
|
} = global.config
|
||||||
|
|
||||||
module.exports = async () => {
|
module.exports = async () => {
|
||||||
let world = await WorldModel.findByPk(1)
|
let world = await WorldModel.findByPk(1)
|
||||||
let price = rand(35, 170)
|
// Получаем все ресурсы и их цены
|
||||||
world.matPrice = price
|
let resources = await ResourcePriceModel.findAll();
|
||||||
world.save()
|
|
||||||
|
if (resources.length === 0) {
|
||||||
|
return console.error('Ресурсы не найдены в базе данных.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Считаем среднюю стоимость ресурсов
|
||||||
|
let totalPrice = resources.reduce((sum, resource) => sum + resource.price, 0);
|
||||||
|
let averagePrice = totalPrice / resources.length;
|
||||||
|
|
||||||
|
// Рассчитываем стоимость материала
|
||||||
|
let materialPrice = Math.round(averagePrice / 10); // Округляем до целого числа
|
||||||
|
|
||||||
|
// Обновляем модель World
|
||||||
|
world.matPrice = materialPrice;
|
||||||
|
await world.save();
|
||||||
|
|
||||||
|
console.log(`Стоимость материала обновлена: ${materialPrice}`);
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user