float Hours = 09;
float Minutes = 00;
if (DateTime.Now.Hour == Hours && DateTime.Now.Minute == Minutes) {
AddReward();
}
Чи можна в цьому випадку таймер на хвилину? Чи не пропустить він виконання методу, або двічі його не виконає?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Повідомлення користувача kinachuk1990
Сторінки 1
float Hours = 09;
float Minutes = 00;
if (DateTime.Now.Hour == Hours && DateTime.Now.Minute == Minutes) {
AddReward();
}
Чи можна в цьому випадку таймер на хвилину? Чи не пропустить він виконання методу, або двічі його не виконає?
В мене застосунок працює постійно. Консольний застосунок і мені просто потрібно щоб він кожного дня в певний час виконував метод AddReward() незалежно коли запущений застосунок
Всім привіт. Потрібна написати код щоб кожного дня в певний час виконувався метод. Шукав інформацію знайшов що можна зробити таймером, але це трохи мені не підходить тому що після перезапуска програми таймер стартує заново. Хто може порекомендувати як це краще реалізувати? ось код з таймером
static void Main(string[] args) {
SetTimer();
Console.ReadLine();
aTimer.Stop();
aTimer.Dispose();
}
private static void SetTimer() {
aTimer = new System.Timers.Timer(86400000);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(object sender, ElapsedEventArgs e) {
Console.WriteLine(e.SignalTime);
AddReward();
}
По цьому коду все працює виконується AddReward таймер 86400000 це є 24 години і кожні 24 години спрацьовує, але цей таймер залежить від часу запуску, або перезапуску програми.
Мені потрібно щось типу такого.
float Hours = 09;
float Minutes = 00;
if (DateTime.Now.Hour == Hours && DateTime.Now.Minute == Minutes) {
AddReward();
}
Буду вдячний за допомогу
Якщо це так, що бот не може відправити повідомлення поки користувач не надішле йому, тоді як боти надсилають кожного дня всім користувачам сповіщення? Особисто мені приходять сповіщення в бот в якому я є кожного дня в певний час і якось він може відправити всім користувачам сповіщення?
Всім привіт зіткнувся з такою проблемою що неможу надіслати повідомлення користувачу знаючи його чат ід. https://telegrambots.github.io/book/2/s … index.html тут шукав так і не знайшов. Так само в ютубі і гуглі толком нічого немає. Можливо хтось писав бота та знає як це реалізувати.
async static void BuyProducts(int id,int idProduct,ITelegramBotClient client,long chat)
{
await using(ApplicationContext db = new ApplicationContext())
{
UsersDTO user = db.Users.FirstOrDefault(u => u.TelegramID == id);
SellProducts buyProduct = db.SellProdukts.FirstOrDefault(p => p.Id == idProduct);
if(user.Balance < buyProduct.Price)
{
await client.SendTextMessageAsync(chat, @$"У вас невистачає коштів!
Ваш баланс: {user.Balance} TRX
Вартість на {buyProduct.Name} : {buyProduct.Price} TRX");
}
else
{
user.Balance -= buyProduct.Price;
if(buyProduct.Name == "Зерно")
{
user.Grain += buyProduct.Count;
}
int idclient = buyProduct.TelegramID;
db.Users.Update(user);
db.SellProdukts.Remove(buyProduct);
db.SaveChanges();
await client.SendTextMessageAsync(chat, "Ви успішно купили Зерно!");
UsersDTO sendclient = db.Users.FirstOrDefault(c => c.TelegramID == idclient);
Console.WriteLine(sendclient.TelegramID);
sendclient.Balance += buyProduct.Count;
long buy = (long)sendclient.TelegramID;
await client.SendTextMessageAsync(buy, "Ви успішно продали Зерно!");
db.Users.Update(sendclient);
db.SaveChanges();
}
}
}
В коді реалізується покупка та надсилається повідомлення покупцеві тут працює все добре
await client.SendTextMessageAsync(chat, "Ви успішно купили Зерно!");
але коли я хочу надіслати продавцеві що його продукт продано видає помилку Telegram.Bot.Exceptions.ApiRequestException: 'Bad Request: chat not found'
await client.SendTextMessageAsync(buy, "Ви успішно продали Зерно!");
Буду вдячний за будь які відповіді.
Яку базу даних порекомендуєте саме для мого проекту?Мені не принципово з якою працювати. Але сайти якось працюють і приймають одночасно багато запитів і все працює без помилок?
Купив 1050ti для мене це оптимальний варіант і блок живлення не потрібно міняти і працює супер
Все добре все запрацювало виявляється база даних була відкрита в застосунку DB Browser (SQLite) і не було до неї доступу. Я незнаю як вона себе поведе коли з бота буде декілька запитів одночасно?Чи вона буде опрацьовувати їх по черзі чи помилки буде видавати
Всім привіт! Пишу бота на C# Net core. Використовую Entity Framework та Sqlite і виникла проблема.
В цьому коді все працює добре
async static Task Update(ITelegramBotClient clientBot, Telegram.Bot.Types.Update update, CancellationToken token)
{
var message = update.Message;
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(new[]
{
new KeyboardButton[] { "Button", "Button" },
new KeyboardButton[] { "Button", "Button" },
new KeyboardButton[] { "Button", "Button" },
new KeyboardButton[] { "Button", "Button" }
})
{
ResizeKeyboard = true
};
if (message.Text != null)
{
if (message.Text=="/start")
{
await using Stream stream = System.IO.File.OpenRead(@"C:\FarmBot\FarmImage.jpg");
await clientBot.SendPhotoAsync(message.Chat.Id, new InputOnlineFile(stream, "FarmImage.jpg"), message.Caption = "text "+ message.Chat.FirstName + "text", replyMarkup: replyKeyboardMarkup);
using (ApplicationContext db = new ApplicationContext())
{
UsersDTO dto = new UsersDTO();
dto.TelegramID = (int)message.Chat.Id;
dto.Balance = 0;
dto.Plot = 1;
dto.Tractor = 0;
dto.Grain = 50;
dto.Incubator = 0;
dto.Chickens = 0;
dto.Eggs = 0;
db.Users.Add(dto);
db.SaveChanges();
Console.WriteLine("Данi збереженi");
var users = db.Users.ToList();
foreach (UsersDTO user in users)
Console.WriteLine($"{user.Id}.{user.TelegramID}, {user.Balance}, {user.Plot}");
}
Але це мене не влаштовує тому що кожного разу коли буде виконуватися /start буде додаватися той самий TelegtemID в базу даних де він уже є.
Якщо я намагаюсь скористатись пошуком чи є цей ID в базі видає помилку
using (ApplicationContext db = new ApplicationContext())
{
var client = db.Users.Find((int)message.Chat.Id)
if(client == null){
UsersDTO dto = new UsersDTO();
dto.TelegramID = (int)message.Chat.Id;
dto.Balance = 0;
dto.Plot = 1;
dto.Tractor = 0;
dto.Grain = 50;
dto.Incubator = 0;
dto.Chickens = 0;
dto.Eggs = 0;
db.Users.Add(dto);
db.SaveChanges();
Console.WriteLine("Данi збереженi");
var users = db.Users.ToList();
foreach (UsersDTO user in users)
Console.WriteLine($"{user.Id}.{user.TelegramID}, {user.Balance}, {user.Plot}");
}
}
В цьому коді додав просту перевірку чи є цей клієнт в базі, якщо немає додаємо. І з цією перевіркою код вже не праює
private static Task Error(ITelegramBotClient client, Exception exception, CancellationToken token)
{
throw new NotImplementedException();
}
ось переходить в Task Error
Подумав можливо проблема в Task зробив окремий метод для додавання клієнтів
if (message.Text=="/start")
{AddClient(message.Chat.Id)
}
async static void AddClient(int id) {
await using (ApplicationContext db = new ApplicationContext())
{
var add = db.Users.Find(id);
Console.WriteLine(add);
if (add == null)
{
UsersDTO dto = new UsersDTO();
dto.TelegramID = id;
dto.Balance = 0;
dto.Plot = 1;
dto.Tractor = 0;
dto.Grain = 50;
dto.Incubator = 0;
dto.Chickens = 0;
dto.Eggs = 0;
db.Users.Add(dto);
db.SaveChanges();
Console.WriteLine("Данi збереженi");
var users = db.Users.ToList();
foreach (UsersDTO user in users)
Console.WriteLine($"{user.Id}.{user.TelegramID}, {user.Balance}, {user.Plot}");
}
}
Після цього Помилка стається на db.SaveChanges(); помилка 5 База даних заблокована
Що я роблю не так? Як це правильно написати?Буду вдячний будь якій допомозі
Який блок живлення порекомендуєте для rx580 8G?
Тоді кращим варіантом буде rx 550 4G DDR5 ніж 1030 і тоді і блок живлення не прийдеться міняти
Дякую за відповідь. А чи небуде проблем через те що оперативна память DDR3,а відеопамять DDR5?
Всім доброго дня. Вирішив на своєму старому ПК замінити відеокарту так як там стоїть стара GT 430, а хотілося б щось поновіше. Придивляюсь до RX 570 - 580 на 4-8G, але незнаю чи вона буде на моїй материнці працювати так як там швидше за все PCI Express першої версії, а ця відеокарта хоче третьої версії. Шукав інформацію в гуглі про ці версії PCI Express то зрозумів що на старіших версіях швидкість передачі даних нижча ніж в третій і відеокарта не зможе працювти на всі 100%, але мені не принципово щоб вона працювала на всі 100% головне щоб працювала на те скільки позволяє PCI Express. Підскажіть чи буде взагалі працювати ця відеокарта в моїй материнці? Можливо хтось теж користується на таких материнках з такими відеокартами? Буду вдячний будь яким відповідям просто не має бажання викинути гроші як вона не буде працювати.
Материнська плата: Asrock n68c-s ucc
Процесор: AMD Phenom x6 1055T 2.8GHz - максимальний для цієї материнки 6 ядер
Оперативна память: DDR3 16G 1600
SSD: 250G
HDD: 1TB
Блок живлення 500wat
Велике дякую все працює. Чи можливо зберегти дані годин-хвилин без бази даних?
Всім привіт виникла проблема в додаванні години і хвилини в DateTime може я щось не так роблю?
DateTime compoff;
if (textBox1.Text != ""&&textBox2.Text != "") {
double h = Convert.ToDouble(textBox1.Text);
double m = Convert.ToDouble(textBox2.Text);
compoff = DateTime.Now.AddHours(h);
compoff = DateTime.Now.AddMinutes(m);
pictureBox1.Visible = true;
button1.Visible = true;
progressBar1.Visible = true;
progressBar1.Maximum = Convert.ToInt32(h) * 60 * 60;
timeroff.Start();
}
Потрібно додати "h" і "m" додає тільки мінути бо вони додаються вже після годин, якщо поміняти місцями
compoff = DateTime.Now.AddHours(h);
compoff = DateTime.Now.AddMinutes(m);
додає години хвилин немає. Як можна це виправити?
Сторінки 1