First thing's first
Bubbles are not an absolute indicator of fermentation. The most reliable way to tell if your fermentation is "done" is to use a hydrometer, and once you find you are getting consistent gravity over several days, then it has finished digesting sugars (still technically fermenting).
Fermenting Hot, and what it means
Fermenting on the warmer side does a number of things to beer. First, it makes the yeast much happier, most yeast strains are quite content around 30 C. For a brewer, however, this poses a problem. Happy yeast digest sugars more rapidly, meaning they have to open up more pathways to accommodate the food supply; think of emergency detour routes on a clogged highway, the main route is filled to capacity, so other routes start to be taken to get around it.
This can give you a number of compounds in your beer, some good, some bad depending on what you're after. One of the compounds that can be made is fusel alcohols (higher order alcohols). These tend to be unpleasant, and if you give your beer a good whiff, you'll know they are there if it smells like rubbing alcohol. These can be unpleasant to the consumer, giving a hot sensation, and causing more severe hangover-like symptoms as they are metabolized.
The positive potential outcome, is that fusel alcohols combine with acids (typically Acetyl CoA from yeast) to make esters. Esters are aromatic compounds that are often associated with fruits and flowers. Which could be a good or bad thing, depending on what you want.
- Take a hydrometer reading, and then take one the following day. If the readings are the same, your yeast are done digesting sugars. They will still be active, cleaning up the beer.
- If the beer smells like rubbing alcohol (fusel) you can try to save it by pitching fresh (ideally healthy, from a starter) yeast, with some dextrose. This will give the new yeast something to chew on and hopefully allow them to convert the fusel alcohols to esters. I had success saving a Saison that fermented hot, and stopped at 1.020 (notorious of French Dupont Saison strains) that was very fusel. Pitching fresh yeast (different strain) and a bit of dextrose, and giving it time to condition gave a very fruity (not Saison) beer that was at the very least palatable.
- If #1 is good, and #2 doesn't exist, simply allow to condition and then bottle as you would normally.