1. Чтобы настроить вывод оставшегося времени кулдауна на экран при использовании команды, вы можете использовать модуль `time` для форматирования оставшегося времени в удобный формат. Вот пример, как можно модифицировать ваш код:
```python
import telebot
import sqlite3
import datetime
import time
bot = telebot.TeleBot(token)
sql = sqlite3.connect('database.db', check_same_thread=False)
conn = sql.cursor()
@bot.message_handler(commands=["go"])
def go(message):
last_command_use_time = conn.execute('SELECT get_card_cd FROM users WHERE user_id={}'.format(message.chat.id)).fetchone()[0]
if not last_command_use_time or (datetime.datetime.now() - datetime.datetime.strptime(last_command_use_time, '%Y-%m-%d %H:%M:%S.%f')).total_seconds() / 3600 > 4:
# Если кнопка не нажималась или с прошлого запуска команды прошло более 4 часов
conn.execute('UPDATE users SET get_card_cd=? WHERE user_id=?', (datetime.datetime.now(), message.chat.id))
sql.commit()
bot.send_message(message.chat.id, 'Нужное сообщение...')
else:
# Если не прошло более 4 часов
seconds = 4 * 3600 - int((datetime.datetime.now() - datetime.datetime.strptime(last_command_use_time, '%Y-%m-%d %H:%M:%S.%f')).total_seconds())
remaining_time = time.strftime("%H:%M:%S", time.gmtime(seconds))
bot.send_message(message.chat.id, 'Осталось подождать {} времени'.format(remaining_time))
bot.polling(none_stop=True)
```
2. Чтобы исправить проблему, когда счетчик кулдауна в команде '/go' работает наоборот, вам нужно изменить логику проверки времени. Вместо вычитания текущего времени из времени последнего использования команды, вы можете выполнить обратную операцию и вычесть время последнего использования команды из текущего времени. Также обратите внимание, что вы должны использовать функцию `total_seconds()` для получения количества секунд между двумя датами. Вот исправленный код:
```python
import telebot
import sqlite3
import datetime
bot = telebot.TeleBot(token)
sql = sqlite3.connect('database.db', check_same_thread=False)
conn = sql.cursor()
@bot.message_handler(commands=["go"])
def go(message):
last_command_use_time = conn.execute('SELECT get_card_cd FROM users WHERE user_id={}'.format(message.chat.id)).fetchone()[0]
if not last_command_use_time or (datetime.datetime.now() - datetime.datetime.strptime(last_command_use_time, '%Y-%m-%d %H:%M:%S.%f')).total_seconds() / 3600 > 4:
# Если кнопка не нажималась или с прошлого запуска команды прошло более 4 часов
conn.execute('UPDATE users SET get_card_cd=? WHERE user_id=?', (datetime.datetime.now(), message.chat.id))
sql.commit()
bot.send_message(message.chat.id, 'Нужное сообщение...')
else:
# Если не прошло более 4 часов
seconds = int((datetime.datetime.now() - datetime.datetime.strptime(last_command_use_time, '%Y-%m-%d %H:%M:%S.%f')).total_seconds())
remaining_time = 4 * 3600 - seconds
bot.send_message(message.chat.id, 'Осталось подождать {} времени'.format(datetime.timedelta(seconds=remaining_time)))
bot.polling(none_stop=True)
```
Обратите внимание, что я вызываю `datetime.timedelta(seconds=remaining_time)` для форматированного вывода оставшегося времени.