Some good answers here. We know what we need in a good bug tracking database. Those same features, properly exercised, work towards educating the bug reporter.
This is where good bug database moderation comes in. Bugs should immediately be qualified and categorized. All missing data should be put back in the user's court, and when not provided, the bug put on hold. No data for a month, it's not important to the user, the bug report is closed.
When customers see their bug quickly demoted in priority ("affects only one customer occasionally"), marginalized ("cannot reproduce", "not enough data provided to identify"), sidelined ("waiting for missing information","recategorized"), etc., they'll pretty soon realize they have to step up to the plate and play ball. Provide more and correct information or it goes to the bottom of the pile, and then goes away altogether with the next minor release.
Petty, snarky comments of the user are encoded in the bug database forever. Polite responses, or better yet, automated ones are the only thing from the developer's side. Every new input of data is addressed by a human with a Thank You and a change in bug status.
Sure, they'll complain about the threshold of effort required to properly report a bug. They'll complain about the prioritization. They'll complain about the bugs being closed out after a timeout or at the next software release. You just shrug and say, if it was so important, they'd work with you and give you what you need.
If they want revenge, they can hold the bug open by continually reproducing the problem and inputing more data about it. Then, you'll have what you need to fix the bug.